Skip to content

Commit 74d4200

Browse files
Abdussalam Abdurrahmanmarijnh
authored andcommitted
[clojure mode] Highlight all reader macro characters with meta.
1 parent 90f4847 commit 74d4200

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

mode/clojure/clojure.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,10 @@ CodeMirror.defineMode("clojure", function (options) {
152152
var atom = createLookupMap(commonAtoms);
153153
var specialForm = createLookupMap(commonSpecialForms);
154154
var coreSymbol = createLookupMap(commonCoreSymbols);
155-
var indentSymbol = createLookupMap(commonIndentSymbols);;
155+
var indentSymbol = createLookupMap(commonIndentSymbols);
156156
var assumeBody = /^(?:def|with)[^\/]+$|\/(?:def|with)/;
157157
var numberLiteral = /^[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?/;
158-
var symbol = /[\w*+!\-._?:<>\/'\xa1-\uffff]/;
158+
var symbol = /[!#'*+\-.\/:<>?_\w\xa1-\uffff]/;
159159

160160
var tokenType;
161161

@@ -170,16 +170,15 @@ CodeMirror.defineMode("clojure", function (options) {
170170
if (ch === "(" || ch === "[" || ch === "{") {tokenType = "open"; return "bracket";}
171171
if (ch === ")" || ch === "]" || ch === "}") {tokenType = "close"; return "bracket";}
172172
if (ch === ";") {stream.skipToEnd(); tokenType = "space"; return "comment";}
173-
if (/['`~@]/.test(ch)) return "atom";
174-
if (/[#^]/.test(ch)) return "meta"
173+
if (/[#'@^`~]/.test(ch)) return "meta";
175174

176175
var name = readSymbol(stream);
177176
tokenType = "symbol";
178177

179178
if (atom.propertyIsEnumerable(name) || name.charAt(0) === ":") return "atom";
180179
if (specialForm.propertyIsEnumerable(name) ||
181180
coreSymbol.propertyIsEnumerable(name)) return "keyword";
182-
if (state.lastToken === "(") return "builtin";
181+
if (state.lastToken === "(") return "builtin"; // head symbol
183182

184183
return "variable";
185184
}
@@ -230,7 +229,7 @@ CodeMirror.defineMode("clojure", function (options) {
230229
tokenType = null;
231230
var style = state.tokenize(stream, state);
232231

233-
if (tokenType != "space") {
232+
if (tokenType !== "space") {
234233
if (state.lastToken === "(" && state.ctx.indentTo === null) {
235234
if (tokenType === "symbol" &&
236235
(indentSymbol.propertyIsEnumerable(stream.current()) ||
@@ -251,7 +250,7 @@ CodeMirror.defineMode("clojure", function (options) {
251250
return style;
252251
},
253252

254-
indent: function (state, _textAfter) {
253+
indent: function (state) {
255254
var i = state.ctx.indentTo;
256255

257256
return (typeof i === "number") ?

mode/clojure/test.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -80,20 +80,20 @@
8080
// "[bracket (][comment comment] [comment (][comment foo] [comment 1] [comment 2] [comment 3][comment )][bracket )]"
8181
);
8282

83-
MT("quotes",
84-
"[atom '][number 1]",
85-
"[atom ':foo]",
86-
"[atom '][string \"foo\"]",
87-
"[atom '][variable x]",
88-
"[atom '][bracket (][builtin a] [variable b] [variable c][bracket )]",
89-
"[atom '][bracket [[][variable a] [variable b] [variable c][bracket ]]]",
90-
"[atom '][bracket {][variable a] [number 1] [atom :foo] [number 2] [variable c] [number 3][bracket }]",
91-
"[atom '][meta #][bracket {][variable a] [number 1] [atom :foo][bracket }]"
92-
);
93-
94-
MT("# and ^",
95-
"[meta #]",
96-
"[meta ^]"
83+
MT("reader macro characters",
84+
"[meta #][variable _]",
85+
"[meta @][variable x]",
86+
"[meta ^][bracket {][atom :tag] [variable String][bracket }]",
87+
"[meta `][bracket (][builtin f] [variable x][bracket )]",
88+
"[meta ~][variable foo#]",
89+
"[meta '][number 1]",
90+
"[meta '][atom :foo]",
91+
"[meta '][string \"foo\"]",
92+
"[meta '][variable x]",
93+
"[meta '][bracket (][builtin a] [variable b] [variable c][bracket )]",
94+
"[meta '][bracket [[][variable a] [variable b] [variable c][bracket ]]]",
95+
"[meta '][bracket {][variable a] [number 1] [atom :foo] [number 2] [variable c] [number 3][bracket }]",
96+
"[meta '#][bracket {][variable a] [number 1] [atom :foo][bracket }]"
9797
);
9898

9999
var specialForms = [".", "catch", "def", "do", "if", "monitor-enter",
@@ -347,7 +347,7 @@
347347
"[bracket (][keyword defmacro] [variable foo]",
348348
" [string \"here is an indented doc-string.\"]",
349349
" [bracket [[][variable x] [variable y][bracket ]]]",
350-
" [atom `][bracket (][keyword println] [atom ~][variable x] [atom ~@][variable y][bracket ))]"
350+
" [meta `][bracket (][keyword println] [meta ~][variable x#] [meta ~@][variable y][bracket ))]"
351351
);
352352

353353
MT("should indent defmethod",

0 commit comments

Comments
 (0)