Skip to content

Commit 626cc7d

Browse files
authored
enh(scheme) allow [] argument lists (#2913)
* enh(scheme) allow [] argument lists * chore() lint scheme.js
1 parent a56d416 commit 626cc7d

File tree

4 files changed

+107
-33
lines changed

4 files changed

+107
-33
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Language improvements:
1313

1414
Grammar improvements:
1515

16+
- enh(scheme) Allow `[]` for argument lists (#2913) [Josh Goebel][]
1617
- enh(vb) Large rework of VB.net grammar (#2808) [Jan Pilzer][]
1718
- Adds support for Date data types, see (#2775)
1819
- Adds support for `REM` comments and fixes `'''` doctags (#2875) (#2851)

src/languages/scheme.js

Lines changed: 94 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ Category: lisp
1010
*/
1111

1212
export default function(hljs) {
13-
var SCHEME_IDENT_RE = '[^\\(\\)\\[\\]\\{\\}",\'`;#|\\\\\\s]+';
14-
var SCHEME_SIMPLE_NUMBER_RE = '(-|\\+)?\\d+([./]\\d+)?';
15-
var SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[+\\-]' + SCHEME_SIMPLE_NUMBER_RE + 'i';
16-
var KEYWORDS = {
13+
const SCHEME_IDENT_RE = '[^\\(\\)\\[\\]\\{\\}",\'`;#|\\\\\\s]+';
14+
const SCHEME_SIMPLE_NUMBER_RE = '(-|\\+)?\\d+([./]\\d+)?';
15+
const SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[+\\-]' + SCHEME_SIMPLE_NUMBER_RE + 'i';
16+
const KEYWORDS = {
1717
$pattern: SCHEME_IDENT_RE,
1818
'builtin-name':
1919
'case-lambda call/cc class define-class exit-handler field import ' +
@@ -51,31 +51,43 @@ export default function(hljs) {
5151
'with-input-from-file with-output-to-file write write-char zero?'
5252
};
5353

54-
var LITERAL = {
54+
const LITERAL = {
5555
className: 'literal',
5656
begin: '(#t|#f|#\\\\' + SCHEME_IDENT_RE + '|#\\\\.)'
5757
};
5858

59-
var NUMBER = {
59+
const NUMBER = {
6060
className: 'number',
6161
variants: [
62-
{ begin: SCHEME_SIMPLE_NUMBER_RE, relevance: 0 },
63-
{ begin: SCHEME_COMPLEX_NUMBER_RE, relevance: 0 },
64-
{ begin: '#b[0-1]+(/[0-1]+)?' },
65-
{ begin: '#o[0-7]+(/[0-7]+)?' },
66-
{ begin: '#x[0-9a-f]+(/[0-9a-f]+)?' }
62+
{
63+
begin: SCHEME_SIMPLE_NUMBER_RE,
64+
relevance: 0
65+
},
66+
{
67+
begin: SCHEME_COMPLEX_NUMBER_RE,
68+
relevance: 0
69+
},
70+
{
71+
begin: '#b[0-1]+(/[0-1]+)?'
72+
},
73+
{
74+
begin: '#o[0-7]+(/[0-7]+)?'
75+
},
76+
{
77+
begin: '#x[0-9a-f]+(/[0-9a-f]+)?'
78+
}
6779
]
6880
};
6981

70-
var STRING = hljs.QUOTE_STRING_MODE;
82+
const STRING = hljs.QUOTE_STRING_MODE;
7183

72-
var REGULAR_EXPRESSION = {
84+
const REGULAR_EXPRESSION = {
7385
className: 'regexp',
7486
begin: '#[pr]x"',
7587
end: '[^\\\\]"'
7688
};
7789

78-
var COMMENT_MODES = [
90+
const COMMENT_MODES = [
7991
hljs.COMMENT(
8092
';',
8193
'$',
@@ -86,65 +98,114 @@ export default function(hljs) {
8698
hljs.COMMENT('#\\|', '\\|#')
8799
];
88100

89-
var IDENT = {
101+
const IDENT = {
90102
begin: SCHEME_IDENT_RE,
91103
relevance: 0
92104
};
93105

94-
var QUOTED_IDENT = {
106+
const QUOTED_IDENT = {
95107
className: 'symbol',
96108
begin: '\'' + SCHEME_IDENT_RE
97109
};
98110

99-
var BODY = {
111+
const BODY = {
100112
endsWithParent: true,
101113
relevance: 0
102114
};
103115

104-
var QUOTED_LIST = {
116+
const QUOTED_LIST = {
105117
variants: [
106-
{ begin: /'/ },
107-
{ begin: '`' }
118+
{
119+
begin: /'/
120+
},
121+
{
122+
begin: '`'
123+
}
108124
],
109125
contains: [
110126
{
111-
begin: '\\(', end: '\\)',
112-
contains: ['self', LITERAL, STRING, NUMBER, IDENT, QUOTED_IDENT]
127+
begin: '\\(',
128+
end: '\\)',
129+
contains: [
130+
'self',
131+
LITERAL,
132+
STRING,
133+
NUMBER,
134+
IDENT,
135+
QUOTED_IDENT
136+
]
113137
}
114138
]
115139
};
116140

117-
var NAME = {
141+
const NAME = {
118142
className: 'name',
119143
relevance: 0,
120144
begin: SCHEME_IDENT_RE,
121145
keywords: KEYWORDS
122146
};
123147

124-
var LAMBDA = {
125-
begin: /lambda/, endsWithParent: true, returnBegin: true,
148+
const LAMBDA = {
149+
begin: /lambda/,
150+
endsWithParent: true,
151+
returnBegin: true,
126152
contains: [
127153
NAME,
128154
{
129-
begin: /\(/, end: /\)/, endsParent: true,
130-
contains: [IDENT],
155+
endsParent: true,
156+
variants: [
157+
{
158+
begin: /\(/,
159+
end: /\)/
160+
},
161+
{
162+
begin: /\[/,
163+
end: /\]/
164+
}
165+
],
166+
contains: [ IDENT ]
131167
}
132168
]
133169
};
134170

135-
var LIST = {
171+
const LIST = {
136172
variants: [
137-
{ begin: '\\(', end: '\\)' },
138-
{ begin: '\\[', end: '\\]' }
173+
{
174+
begin: '\\(',
175+
end: '\\)'
176+
},
177+
{
178+
begin: '\\[',
179+
end: '\\]'
180+
}
139181
],
140-
contains: [LAMBDA, NAME, BODY]
182+
contains: [
183+
LAMBDA,
184+
NAME,
185+
BODY
186+
]
141187
};
142188

143-
BODY.contains = [LITERAL, NUMBER, STRING, IDENT, QUOTED_IDENT, QUOTED_LIST, LIST].concat(COMMENT_MODES);
189+
BODY.contains = [
190+
LITERAL,
191+
NUMBER,
192+
STRING,
193+
IDENT,
194+
QUOTED_IDENT,
195+
QUOTED_LIST,
196+
LIST
197+
].concat(COMMENT_MODES);
144198

145199
return {
146200
name: 'Scheme',
147201
illegal: /\S/,
148-
contains: [hljs.SHEBANG(), NUMBER, STRING, QUOTED_IDENT, QUOTED_LIST, LIST].concat(COMMENT_MODES)
202+
contains: [
203+
hljs.SHEBANG(),
204+
NUMBER,
205+
STRING,
206+
QUOTED_IDENT,
207+
QUOTED_LIST,
208+
LIST
209+
].concat(COMMENT_MODES)
149210
};
150211
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
11
(<span class="hljs-name"><span class="hljs-builtin-name">lambda</span></span> (x y z) (<span class="hljs-name"><span class="hljs-builtin-name">+</span></span> y z))
2+
3+
(<span class="hljs-name"><span class="hljs-builtin-name">define</span></span> add-point
4+
(<span class="hljs-name"><span class="hljs-builtin-name">lambda</span></span> [p1 p2]
5+
(<span class="hljs-name">make-point</span>
6+
(<span class="hljs-name"><span class="hljs-builtin-name">+</span></span> (<span class="hljs-name">point-x</span> p1) (<span class="hljs-name">point-x</span> p2))
7+
(<span class="hljs-name"><span class="hljs-builtin-name">+</span></span> (<span class="hljs-name">point-y</span> p1) (<span class="hljs-name">point-y</span> p2)))))

test/markup/scheme/lambda.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
11
(lambda (x y z) (+ y z))
2+
3+
(define add-point
4+
(lambda [p1 p2]
5+
(make-point
6+
(+ (point-x p1) (point-x p2))
7+
(+ (point-y p1) (point-y p2)))))

0 commit comments

Comments
 (0)