|
|
|
@ -114,12 +114,16 @@ function clSymbol(symbol) {
|
|
|
|
return seq(optional(seq('cl', ':')), symbol)
|
|
|
|
return seq(optional(seq('cl', ':')), symbol)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function optSeq(...args) {
|
|
|
|
|
|
|
|
return optional(seq(...args))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = grammar(clojure, {
|
|
|
|
module.exports = grammar(clojure, {
|
|
|
|
name: 'commonlisp',
|
|
|
|
name: 'commonlisp',
|
|
|
|
|
|
|
|
|
|
|
|
extras: ($, original) => [...original, $.block_comment],
|
|
|
|
extras: ($, original) => [...original, $.block_comment],
|
|
|
|
conflicts: ($, original) => [...original, [$.with_clause], [$.for_clause], [$.accumulation_clause], [$.loop_macro, $.defun_keyword, $.package_lit]],
|
|
|
|
conflicts: ($, original) => [...original, [$.with_clause, $.package_lit], [$.with_clause], [$.for_clause], [$.accumulation_clause], [$.loop_macro, $.defun_keyword, $.package_lit]],
|
|
|
|
|
|
|
|
|
|
|
|
rules: {
|
|
|
|
rules: {
|
|
|
|
block_comment: _ => token(seq('#|', repeat(choice(/[^|]/, /\|[^#]/)), '|#')),
|
|
|
|
block_comment: _ => token(seq('#|', repeat(choice(/[^|]/, /\|[^#]/)), '|#')),
|
|
|
|
@ -226,7 +230,7 @@ module.exports = grammar(clojure, {
|
|
|
|
for_clause: $ => choice(seq(choice(clSymbol('for'), clSymbol('and'), clSymbol('as')), repeat($._gap), field('variable', $._form), optional(field('type', seq(repeat($._gap), $._form))),
|
|
|
|
for_clause: $ => choice(seq(choice(clSymbol('for'), clSymbol('and'), clSymbol('as')), repeat($._gap), field('variable', $._form), optional(field('type', seq(repeat($._gap), $._form))),
|
|
|
|
repeat1($._for_part)), clSymbol('and')),
|
|
|
|
repeat1($._for_part)), clSymbol('and')),
|
|
|
|
|
|
|
|
|
|
|
|
with_clause: $ => seq(clSymbol('with'), repeat($._gap), $._form, optional(field('type', repeat($._gap), $._form)), repeat($._gap), optional(clSymbol("=")), repeat($._gap), optional($._form)),
|
|
|
|
with_clause: $ => seq(clSymbol('with'), repeat($._gap), choice($._form, seq($._form, repeat($._gap), field('type', $._form))), repeat($._gap), optSeq(clSymbol("="), repeat($._gap)), optSeq($._form, repeat($._gap))),
|
|
|
|
do_clause: $ => prec.left(seq(clSymbol('do'), repeat1(prec.left(seq(repeat($._gap), $._form, repeat($._gap)))))),
|
|
|
|
do_clause: $ => prec.left(seq(clSymbol('do'), repeat1(prec.left(seq(repeat($._gap), $._form, repeat($._gap)))))),
|
|
|
|
while_clause: $ => prec.left(seq(choice(clSymbol('while'), clSymbol('until')), repeat($._gap), $._form)),
|
|
|
|
while_clause: $ => prec.left(seq(choice(clSymbol('while'), clSymbol('until')), repeat($._gap), $._form)),
|
|
|
|
repeat_clause: $ => prec.left(seq(clSymbol('repeat'), repeat($._gap), $._form)),
|
|
|
|
repeat_clause: $ => prec.left(seq(clSymbol('repeat'), repeat($._gap), $._form)),
|
|
|
|
|