blob: e041e7617e51c92a9738939bf0769a1097e5ef3c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
;;; flycheck-android-experimental.el --- Flycheck for Android using experimental
;;; gradle plugin
;; Copyright (C) 2017 by Joel Klinghed
;; Author: Joel Klinghed <the_jk@yahoo.com>
;;; Commentary:
;;; Code:
(require 'flycheck)
(defvar flycheck-android-sessiondir nil
"Session directory used for caching.")
(flycheck-def-option-var flycheck-android-java-checkstyle-jar nil android-java
"Path to checkstyle-VERSION-all.jar."
:safe #'stringp)
(make-variable-buffer-local 'flycheck-android-java-checkstyle-jar)
(flycheck-def-option-var flycheck-android-java-checkstyle-path nil android-java
"Path to use as workdir and base for config and properties."
:safe #'stringp)
(make-variable-buffer-local 'flycheck-android-java-checkstyle-path)
(flycheck-def-option-var flycheck-android-java-checkstyle-config nil android-java
"Path to checkstyle-config.xml if one should be used."
:safe #'stringp)
(make-variable-buffer-local 'flycheck-android-java-checkstyle-config)
(flycheck-def-option-var flycheck-android-java-checkstyle-properties nil android-java
"Path to checkstyle.properties if one should be used."
:safe #'stringp)
(make-variable-buffer-local 'flycheck-android-java-checkstyle-properties)
(flycheck-define-checker android-java
"Java syntax checker using javac."
:command ("python"
(eval (flycheck-android-find-tool "java"))
(option "--checkstyle-jar="
flycheck-android-java-checkstyle-jar concat)
(option "--checkstyle-path="
flycheck-android-java-checkstyle-path concat)
(option "--checkstyle-config="
flycheck-android-java-checkstyle-config concat)
(option "--checkstyle-properties="
flycheck-android-java-checkstyle-properties concat)
(eval (flycheck-android-get-sessiondir))
(eval buffer-file-name)
source)
:error-patterns
((warning line-start (file-name) ":" line ": warning:"
(message (one-or-more (not (any "^")))
(any "^"))
line-end)
(error line-start (file-name) ":" line ": error:"
(message (one-or-more (not (any "^")))
(any "^"))
line-end)
;; checkstyle messages
(warning line-start (file-name) ":" line ": warning: " (message) line-end)
(error line-start (file-name) ":" line ": " (message) line-end))
:modes java-mode)
(defun flycheck-android-find-tool (tool)
"Find flycheck-android-TOOL.py.
TOOL=name of tool"
(let ((filename (concat "flycheck-android-" tool ".py")))
(expand-file-name
filename
(concat (file-name-directory (symbol-file 'flycheck-android-find-tool))
(file-name-as-directory "bin")))))
(defun flycheck-android-remove-sessiondir ()
"Delete session dir if it exists and unsets the variable."
(when flycheck-android-sessiondir
(delete-directory flycheck-android-sessiondir t)
(setq flycheck-android-sessiondir nil)))
(defun flycheck-android-get-sessiondir ()
"Return sessiondir if already set otherwise create and set it."
(or flycheck-android-sessiondir
(progn
(add-hook 'kill-emacs-hook 'flycheck-android-remove-sessiondir)
(setq flycheck-android-sessiondir
(make-temp-file "flycheck-android" t)))))
(add-to-list 'flycheck-checkers 'android-java)
(provide 'flycheck-android-experimental)
;;; flycheck-android-experimental.el ends here
|