UNPKG

5.28 kBJavaScriptView Raw
1/*
2Language: AspectJ
3Author: Hakan Ozler <ozler.hakan@gmail.com>
4Website: https://www.eclipse.org/aspectj/
5Description: Syntax Highlighting for the AspectJ Language which is a general-purpose aspect-oriented extension to the Java programming language.
6Audit: 2020
7*/
8
9/** @type LanguageFn */
10function aspectj(hljs) {
11 const regex = hljs.regex;
12 const KEYWORDS = [
13 "false",
14 "synchronized",
15 "int",
16 "abstract",
17 "float",
18 "private",
19 "char",
20 "boolean",
21 "static",
22 "null",
23 "if",
24 "const",
25 "for",
26 "true",
27 "while",
28 "long",
29 "throw",
30 "strictfp",
31 "finally",
32 "protected",
33 "import",
34 "native",
35 "final",
36 "return",
37 "void",
38 "enum",
39 "else",
40 "extends",
41 "implements",
42 "break",
43 "transient",
44 "new",
45 "catch",
46 "instanceof",
47 "byte",
48 "super",
49 "volatile",
50 "case",
51 "assert",
52 "short",
53 "package",
54 "default",
55 "double",
56 "public",
57 "try",
58 "this",
59 "switch",
60 "continue",
61 "throws",
62 "privileged",
63 "aspectOf",
64 "adviceexecution",
65 "proceed",
66 "cflowbelow",
67 "cflow",
68 "initialization",
69 "preinitialization",
70 "staticinitialization",
71 "withincode",
72 "target",
73 "within",
74 "execution",
75 "getWithinTypeName",
76 "handler",
77 "thisJoinPoint",
78 "thisJoinPointStaticPart",
79 "thisEnclosingJoinPointStaticPart",
80 "declare",
81 "parents",
82 "warning",
83 "error",
84 "soft",
85 "precedence",
86 "thisAspectInstance"
87 ];
88 const SHORTKEYS = [
89 "get",
90 "set",
91 "args",
92 "call"
93 ];
94
95 return {
96 name: 'AspectJ',
97 keywords: KEYWORDS,
98 illegal: /<\/|#/,
99 contains: [
100 hljs.COMMENT(
101 /\/\*\*/,
102 /\*\//,
103 {
104 relevance: 0,
105 contains: [
106 {
107 // eat up @'s in emails to prevent them to be recognized as doctags
108 begin: /\w+@/,
109 relevance: 0
110 },
111 {
112 className: 'doctag',
113 begin: /@[A-Za-z]+/
114 }
115 ]
116 }
117 ),
118 hljs.C_LINE_COMMENT_MODE,
119 hljs.C_BLOCK_COMMENT_MODE,
120 hljs.APOS_STRING_MODE,
121 hljs.QUOTE_STRING_MODE,
122 {
123 className: 'class',
124 beginKeywords: 'aspect',
125 end: /[{;=]/,
126 excludeEnd: true,
127 illegal: /[:;"\[\]]/,
128 contains: [
129 {
130 beginKeywords: 'extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton'
131 },
132 hljs.UNDERSCORE_TITLE_MODE,
133 {
134 begin: /\([^\)]*/,
135 end: /[)]+/,
136 keywords: KEYWORDS.concat(SHORTKEYS),
137 excludeEnd: false
138 }
139 ]
140 },
141 {
142 className: 'class',
143 beginKeywords: 'class interface',
144 end: /[{;=]/,
145 excludeEnd: true,
146 relevance: 0,
147 keywords: 'class interface',
148 illegal: /[:"\[\]]/,
149 contains: [
150 {
151 beginKeywords: 'extends implements'
152 },
153 hljs.UNDERSCORE_TITLE_MODE
154 ]
155 },
156 {
157 // AspectJ Constructs
158 beginKeywords: 'pointcut after before around throwing returning',
159 end: /[)]/,
160 excludeEnd: false,
161 illegal: /["\[\]]/,
162 contains: [
163 {
164 begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
165 returnBegin: true,
166 contains: [ hljs.UNDERSCORE_TITLE_MODE ]
167 }
168 ]
169 },
170 {
171 begin: /[:]/,
172 returnBegin: true,
173 end: /[{;]/,
174 relevance: 0,
175 excludeEnd: false,
176 keywords: KEYWORDS,
177 illegal: /["\[\]]/,
178 contains: [
179 {
180 begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
181 keywords: KEYWORDS.concat(SHORTKEYS),
182 relevance: 0
183 },
184 hljs.QUOTE_STRING_MODE
185 ]
186 },
187 {
188 // this prevents 'new Name(...), or throw ...' from being recognized as a function definition
189 beginKeywords: 'new throw',
190 relevance: 0
191 },
192 {
193 // the function class is a bit different for AspectJ compared to the Java language
194 className: 'function',
195 begin: /\w+ +\w+(\.\w+)?\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,
196 returnBegin: true,
197 end: /[{;=]/,
198 keywords: KEYWORDS,
199 excludeEnd: true,
200 contains: [
201 {
202 begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
203 returnBegin: true,
204 relevance: 0,
205 contains: [ hljs.UNDERSCORE_TITLE_MODE ]
206 },
207 {
208 className: 'params',
209 begin: /\(/,
210 end: /\)/,
211 relevance: 0,
212 keywords: KEYWORDS,
213 contains: [
214 hljs.APOS_STRING_MODE,
215 hljs.QUOTE_STRING_MODE,
216 hljs.C_NUMBER_MODE,
217 hljs.C_BLOCK_COMMENT_MODE
218 ]
219 },
220 hljs.C_LINE_COMMENT_MODE,
221 hljs.C_BLOCK_COMMENT_MODE
222 ]
223 },
224 hljs.C_NUMBER_MODE,
225 {
226 // annotation is also used in this language
227 className: 'meta',
228 begin: /@[A-Za-z]+/
229 }
230 ]
231 };
232}
233
234export { aspectj as default };