diff options
author | mattkae <mattkae@protonmail.com> | 2022-06-07 08:23:47 -0400 |
---|---|---|
committer | mattkae <mattkae@protonmail.com> | 2022-06-07 08:23:47 -0400 |
commit | bd18a38c2898548a3664a9ddab9f79c84f2caf4a (patch) | |
tree | 95b9933376770381bd8859782ae763be81c2d72b /elpa/irony-20220110.849/irony-cdb.el | |
parent | b07628dddf418d4f47b858e6c35fd3520fbaeed2 (diff) | |
parent | ef160dea332af4b4fe5e2717b962936c67e5fe9e (diff) |
Merge conflict
Diffstat (limited to 'elpa/irony-20220110.849/irony-cdb.el')
-rw-r--r-- | elpa/irony-20220110.849/irony-cdb.el | 218 |
1 files changed, 0 insertions, 218 deletions
diff --git a/elpa/irony-20220110.849/irony-cdb.el b/elpa/irony-20220110.849/irony-cdb.el deleted file mode 100644 index e7d678b..0000000 --- a/elpa/irony-20220110.849/irony-cdb.el +++ /dev/null @@ -1,218 +0,0 @@ -;;; irony-cdb.el --- compilation databases support for irony - -;; Copyright (C) 2012-2014 Guillaume Papin - -;; Author: Guillaume Papin <guillaume.papin@epitech.eu> -;; Keywords: c, convenience, tools - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see <http://www.gnu.org/licenses/>. - -;;; Commentary: -;; -;; This file defines the compilation database interface of irony-mode. -;; -;; Note:For compilation database that looks for a specific file, such as -;; .clang_complete or compile_commands.json, favor `locate-dominating-file' to a -;; handwritten logic if possible as it may be configured by the user to do "the -;; Right Thing (TM)". See `locate-dominating-stop-dir-regexp'. -;; - -;;; Code: - -(require 'irony) - -(require 'cl-lib) - -(autoload 'irony-cdb-clang-complete "irony-cdb-clang-complete") -(autoload 'irony-cdb-json "irony-cdb-json") -(autoload 'irony-cdb-libclang "irony-cdb-libclang") - - -;; -;; Customizable variables -;; - -(defgroup irony-cdb nil - "Irony's compilation database interface." - :group 'irony) - -(defcustom irony-cdb-compilation-databases '(irony-cdb-clang-complete - irony-cdb-libclang - irony-cdb-json) - "List of active compilation databases. - -The compilation database should respond for the following commands: - -`get-compile-options': Takes no argument. This function finds the -compile options used for the current buffer. It must return a -list of cons where the first element is a set of compile options -and the second element the working directory expected for these -commands. The compilation database should return an empty list -for files that it cannot handle." - :type '(repeat function) - :group 'irony-cdb) - -(defcustom irony-cdb-search-directory-list '("." "build") - "List of relative subdirectory paths to be searched for cdb files - -Irony looks for cdb files in any of the supported format by checking -each directory from the currently loaded file and recursively through -parent directories until it hits the root directory or a cdb is -found. At each level of the search irony looks at the subdirectories -listed in `irony-cdb-search-directory-list' for the files. Customize this -list if your cdb is held in a custom directory within you project, -such as a custom named build directory. -" - :type '(repeat string) - :group 'irony-cdb) - - -;; -;; Internal variables -;; - -(defvar-local irony-cdb--compilation-database nil) - - -;; -;; Irony Compilation Database Interface -;; - -;;;###autoload -(defun irony-cdb-autosetup-compile-options () - (interactive) - (irony--awhen (irony-cdb--autodetect-compile-options) - (setq irony-cdb--compilation-database (nth 0 it)) - (irony-cdb--update-compile-options (nth 1 it) (nth 2 it)))) - -;;;###autoload -(defun irony-cdb-menu () - (interactive) - (let ((compilation-database irony-cdb--compilation-database) - (working-directory irony--working-directory) - (compile-options irony--compile-options)) - (save-excursion - (save-window-excursion - (delete-other-windows) - (let ((buffer (get-buffer-create "*Irony/Compilation DB Menu*"))) - (with-current-buffer buffer - (erase-buffer) - (if (null compilation-database) - (insert "No compilation database in use.\n") - (insert (format "Compilation Database: %s\n\n" - (symbol-name compilation-database))) - (insert (format " Working Directory: %s\n" working-directory)) - (insert (format " Compile Options: %s\n" - (mapconcat 'identity compile-options " ")))) - (insert "\n[q] to quit")) - (let ((pop-up-windows t)) - (display-buffer buffer t)) - (fit-window-to-buffer (get-buffer-window buffer)) - (irony--read-char-choice "Irony CDB Buffer" (list ?q))))) - ;; clear `read-char-choice' prompt - (message ""))) - - -;; -;; Functions -;; - -(defun irony-cdb--choose-closest-path (file paths) - "Find the \"best\" path in PATHS matching FILE - -If any paths in PATHS is belongs to the same directory -or a subdirectory of file, we disregard other candidates. - -For remaining candidates, \"nearest\" is measured as abs. difference -in path depth. -- We prefer deeper paths at level +N to those at level -N. -- If multiple paths are equally good, we return the last one. - -Returns nil if paths isn't a list of at least one element. -" - (when (listp paths) - (let ((paths (or - ;; if we find a cdb in cwd or below, don't consider other candidates - (cl-remove-if-not (lambda (x) (string-prefix-p (file-name-directory file) x)) paths) - paths))) - (cl-loop for path in paths - with best-depth-delta = 999999 ; start at +inf - with best-path = nil ; we keep the best so far here - ;; all candidates have their depth compared to that of target file - with file-depth = (length (split-string (expand-file-name file) "/")) ; - for candidate-depth = (length (split-string (expand-file-name path) "/")) - ;; Our metric. We use signum as a tie-breaker to choose deeper candidates - for depth-delta = (+ (abs (- file-depth candidate-depth)) - (* 0.1 (- file-depth candidate-depth))) - do (when (< depth-delta best-depth-delta) - (progn - (setq best-depth-delta depth-delta) - (setq best-path path))) - finally return best-path)))) - -(defun irony-cdb--locate-dominating-file-with-dirs (file - name - subdirectories) - "Convenience wrapper around `locate-dominating-file' - -Looks up the directory hierarchy from FILE for to locate any directory -in `subdirectories` which contains NAME. If multiple files are found, -chooses the one located at the nearest directory level. if multiple -files are found at the same level, picks the first one encountered. -returns the full path to file if found, or nil otherwise." - (let ((candidates - (cl-loop for subdir in subdirectories - for relpath = (concat (file-name-as-directory subdir) name) - for match-maybe = (locate-dominating-file file relpath) - when match-maybe collect (expand-file-name (concat match-maybe relpath))))) - (irony-cdb--choose-closest-path file candidates))) - - -(defun irony-cdb--update-compile-options (compile-options - &optional working-directory) - (setq irony--compile-options compile-options - irony--working-directory working-directory)) - -(defun irony-cdb--autodetect-compile-options () - (catch 'found - (dolist (compilation-database irony-cdb-compilation-databases) - (with-demoted-errors "Irony CDB: error in compilation database: %S" - (irony--awhen (funcall compilation-database 'get-compile-options) - (throw 'found (list compilation-database - (caar it) - (cdar it)))))))) - -(defun irony-cdb--string-suffix-p (suffix string &optional ignore-case) - "Return non-nil if SUFFIX is a suffix of STRING." - (let ((start-pos (- (length string) (length suffix)))) - (and (>= start-pos 0) - (eq t (compare-strings suffix nil nil - string start-pos nil ignore-case))))) - -(defun irony-cdb--remove-compiler-from-flags (flags) - "Remove the compiler from FLAGS read from a compilation database. - -When using ccache, the compiler might be present in FLAGS since -the compiler is `ccache compiler'." - (let* ((first (car flags)) - (flags (cdr flags))) - (if (irony-cdb--string-suffix-p "ccache" first) (cdr flags) flags))) - -(provide 'irony-cdb) - -;; Local Variables: -;; byte-compile-warnings: (not cl-functions) -;; End: - -;;; irony-cdb.el ends here |