mirror of
https://github.com/pestctrl/emacs-config.git
synced 2026-02-16 08:14:15 +00:00
Better error detection for include files
This commit is contained in:
parent
10c94e028b
commit
e58d28dc18
2 changed files with 24 additions and 28 deletions
|
|
@ -26,6 +26,7 @@
|
|||
(require 'llvm-ir-mode)
|
||||
(require 'llvm-shared)
|
||||
(require 'action-map-lib)
|
||||
(require 'anaphora)
|
||||
|
||||
(defvar ll/c-file-action-map
|
||||
'((debug :key ?d :major-mode llvm-mode :buffer-string "debug" :description "[d]ebug pass" :compiler-action assemble)
|
||||
|
|
@ -75,29 +76,15 @@
|
|||
(save-excursion
|
||||
(beginning-of-buffer)
|
||||
(let ((r
|
||||
(rx (and "#include "
|
||||
(or "\"" "<") (group (+ (not space))) (or "\"" ">")))))
|
||||
(when-let ((res (re-search-forward r nil t)))
|
||||
(message "Couldn't find %s header file" (match-string 1))
|
||||
res)))))
|
||||
(rx (and "fatal error: '" (group (+ (not space))) "' file not found"))))
|
||||
(aprog1 (re-search-forward r nil t)
|
||||
(message "Couldn't find '%s' header file" (match-string 1)))))))
|
||||
|
||||
(defun ll/add-include-file ()
|
||||
(interactive)
|
||||
(when (not (or compilation-minor-mode
|
||||
(eq major-mode
|
||||
'compilation-mode)))
|
||||
(user-error "Wrong buffer idiot"))
|
||||
|
||||
(when (not (ll/buffer-has-include-error (current-buffer)))
|
||||
(user-error "The problem is not an include file..."))
|
||||
|
||||
(let ((new-dir (read-directory-name "directory? ")))
|
||||
(setq compilation-arguments
|
||||
(cons (concat (car compilation-arguments)
|
||||
(format " -I%s "
|
||||
new-dir))
|
||||
(cdr compilation-arguments)))
|
||||
(call-interactively #'recompile)))
|
||||
(defun ll/add-include-folder-to-command (command)
|
||||
(let ((directory (read-directory-name "directory? ")))
|
||||
(string-replace "-I" (format "-I%s -I"
|
||||
directory)
|
||||
command)))
|
||||
|
||||
(defun ll/c-file-sentinel (buffer msg)
|
||||
(when (and (string-match-p "exited abnormally with code 1" msg)
|
||||
|
|
@ -106,8 +93,8 @@
|
|||
(let ((new-dir (read-directory-name "directory? ")))
|
||||
(with-current-buffer buffer
|
||||
(setq compilation-arguments
|
||||
(cons (string-replace "-I" (format "-I%s -I" new-dir)
|
||||
(car compilation-arguments))
|
||||
(cons (ll/add-include-folder-to-command
|
||||
(car compilation-arguments))
|
||||
(cdr compilation-arguments)))
|
||||
(call-interactively #'recompile))))))
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(require 'act-on-c-file)
|
||||
(require 'llvm-shared)
|
||||
(require 'anaphora)
|
||||
|
||||
(defun ll/get-cc1-command (file)
|
||||
(let* ((fname (file-name-nondirectory file))
|
||||
|
|
@ -38,7 +40,13 @@
|
|||
:output (make-temp-file nil nil ".o"))
|
||||
"-v")
|
||||
" ")))
|
||||
(shell-command command buffer))
|
||||
(while
|
||||
(progn
|
||||
(shell-command command buffer)
|
||||
(aprog1 (ll/buffer-has-include-error buffer)
|
||||
(when it
|
||||
(setq command
|
||||
(ll/add-include-folder-to-command command)))))))
|
||||
(with-current-buffer (get-buffer buffer)
|
||||
(beginning-of-buffer)
|
||||
(re-search-forward (rx "\"" (literal clang) "\" "
|
||||
|
|
@ -48,9 +56,10 @@
|
|||
(defun ll/kill-gdb-command (file)
|
||||
(interactive
|
||||
(list
|
||||
(--> (current-buffer)
|
||||
(buffer-file-name)
|
||||
(read-file-name "Which file? " nil))))
|
||||
(or (let ((fname (buffer-file-name (current-buffer))))
|
||||
(and (string= "c" (file-name-extension fname))
|
||||
fname))
|
||||
(read-file-name "Which file? "))))
|
||||
(let ((fname (file-name-nondirectory file)))
|
||||
(kill-new
|
||||
(format "r %s"
|
||||
|
|
|
|||
Loading…
Reference in a new issue