summaryrefslogtreecommitdiffstats
path: root/assets/patches
diff options
context:
space:
mode:
authorccQpein <ccqpein@protonmail.com>2024-05-27 15:52:26 -0400
committerccQpein <ccqpein@protonmail.com>2024-05-27 15:52:26 -0400
commit61005f19fadf1483fc322ae2613e9d5e32b1d814 (patch)
treef93edc678ddb7706f7c74e993f175878eb11f353 /assets/patches
parent8f8c953ab69403a7acf516e65265b7f70bc3ec73 (diff)
patch the lisp syntax
Diffstat (limited to 'assets/patches')
-rw-r--r--assets/patches/Lisp.sublime-syntax.patch2365
1 files changed, 2365 insertions, 0 deletions
diff --git a/assets/patches/Lisp.sublime-syntax.patch b/assets/patches/Lisp.sublime-syntax.patch
new file mode 100644
index 00000000..aa82a2b8
--- /dev/null
+++ b/assets/patches/Lisp.sublime-syntax.patch
@@ -0,0 +1,2365 @@
+diff --git a/Lisp/Lisp.sublime-syntax b/Lisp/Lisp.sublime-syntax
+index 50e5dad3..44a9795d 100644
+--- a/Lisp/Lisp.sublime-syntax
++++ b/Lisp/Lisp.sublime-syntax
+@@ -1,11 +1,14 @@
+ %YAML 1.2
+ ---
+-# http://www.sublimetext.com/docs/3/syntax.html
++# https://www.sublimetext.com/docs/syntax.html
+ #
+ # `Common Lisp` Language Reference:
+-# http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/index.html
+-#
++# https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/index.html
++# https://www.lispworks.com/documentation/lw70/CLHS/Front/Contents.htm
+ name: Lisp
++scope: source.lisp
++version: 2
++
+ file_extensions:
+ - lisp
+ - cl
+@@ -17,108 +20,2268 @@ file_extensions:
+ - ss
+ - lsp
+ - fasl # Scheme dialect of Lisp
+-scope: source.lisp
++ - sld # Scheme r7rs library
++
++first_line_match: |-
++ (?xi:
++ ^ \s* ; .*? -\*- .*? \blisp\b .*? -\*- # editorconfig
++ )
++
++###############################################################################
++
+ contexts:
+ main:
+- - include: comments
++ - include: statements
++
++ statements:
+ - include: parens
++ - include: expressions
++ - match: \)
++ scope: invalid.illegal.stray-bracket-end.lisp
+
+ expressions:
+ - include: comments
+ - include: numbers
+- - include: constants
+ - include: strings
+- - include: variables
++ - include: annotations
++ - include: keywords
++ - include: quotes
++ - include: macros
++ - include: modifiers
++ - include: identifiers
++
++###[ COMMENTS ]################################################################
++
++ comments:
++ - include: line-comments
++ - include: block-comments
++ - match: \|#
++ scope: invalid.illegal.stray-comment-end.lisp
++
++ block-comments:
++ - match: '#\|'
++ scope: punctuation.definition.comment.begin.lisp
++ push: block-comment-body
++
++ block-comment-body:
++ - meta_scope: comment.block.lisp
++ - match: '\|#'
++ scope: punctuation.definition.comment.end.lisp
++ pop: 1
++ - include: block-comments
++
++ line-comments:
++ - match: ;+
++ scope: punctuation.definition.comment.lisp
++ push: line-comment-body
++
++ line-comment-body:
++ - meta_scope: comment.line.semicolon.lisp
++ - match: $\n?
++ pop: 1
++
++###[ PARENTHESES ]#############################################################
++
++ parens:
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ push:
++ - paren-body
++ - paren-begin
++
++ paren-begin:
++ - include: class-declaration
++ - include: function-declaration
++ - include: macro-declaration
++ - include: struct-declaration
++ - include: type-declaration
++ - include: variable-declaration
++ - include: other-declaration
++ - include: declare
+ - include: control
+- - include: functions
+- - include: operators
++ - include: loop
++ - include: operator
++ - include: quote
++ - include: namespaces
++ - include: builtin-function
++ - include: other-function
++ - include: comments
++ - include: else-pop
+
+- variables:
+- - match: (\*)(?i:trace-output|terminal-io|suppress-series-warnings|standard-output|standard-input|readtable|read-suppress|read-eval|read-default-float-format|read-base|random-state|query-io|print-right-margin|print-readably|print-radix|print-pretty|print-pprint-dispatch|print-miser-width|print-lines|print-level|print-length|print-gensym|print-escape|print-circle|print-case|print-base|print-array|package|modules|macroexpand-hook|load-verbose|load-truename|load-print|load-pathname|gensym-counter|features|evalhook|error-output|default-pathname-defaults|debugger-hook|debug-io|compile-verbose|compile-print|compile-file-truename|compile-file-pathname|break-on-warnings|break-on-signals|applyhook)(\*)
+- scope: variable.language.lisp
++ paren-body:
++ - meta_scope: meta.parens.lisp
++ - include: paren-end
++ - include: parens
++ - include: expressions
++
++ paren-end:
++ - meta_include_prototype: false
++ - meta_scope: meta.parens.lisp
++ - match: \)
++ scope: punctuation.section.parens.end.lisp
++ pop: 1
++
++###[ LISTS ]###################################################################
++
++ expect-list:
++ # a list expression
++ # skips function-like parentheses on next level
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ set: paren-body
++ - include: comments
++ - include: else-pop
++
++ expect-lists-list:
++ # a list of list expressions
++ # skips function-like parentheses on next 2 levels
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ set: lists-list-body
++ - include: comments
++ - include: else-pop
++
++ lists-list-body:
++ - meta_scope: meta.parens.lisp
++ - include: paren-end
++ - include: lists
++ - include: expressions
++
++ lists:
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ push: paren-body
++
++###[ QUOTED EXPRESSIONS ]######################################################
++
++ quotes:
++ # abbreviation of (quote ...) function
++ - match: \'
++ scope: punctuation.definition.quoted.lisp
++ push: quoted-content
++
++ quoted-content:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ set: quoted-paren-body
++ # A quoted symbol evaluates to the symbol.
++ - match: '{{identifier}}'
++ scope: constant.other.symbol.lisp
+ captures:
+- 1: punctuation.definition.variable.begin.lisp
+- 2: punctuation.definition.variable.end.lisp
+- - match: (\*)(\S*)(\*)
+- scope: variable.other.global.lisp
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: immediately-pop
++
++ quoted-parens:
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ push: quoted-paren-body
++
++ quoted-paren-body:
++ - meta_scope: meta.parens.lisp
++ - include: paren-end
++ - include: quoted-parens
++ - include: expressions
++
++###[ CLASS DECLARATIONS ]######################################################
++
++ class-declaration:
++ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_defcla.htm
++ - match: (?i:defclass|define-class){{break}}
++ scope: meta.class.lisp keyword.declaration.class.lisp
++ set:
++ - class-declaration-slots
++ - class-declaration-parent-list
++ - class-declaration-name
++
++ class-declaration-name:
++ - match: '{{identifier}}'
++ scope: entity.name.class.lisp
+ captures:
+- 1: punctuation.definition.variable.begin.lisp
+- 3: punctuation.definition.variable.end.lisp
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++ class-declaration-parent-list:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ set: class-declaration-parent-list-body
++ - include: comments
++ - include: else-pop
++
++ class-declaration-parent-list-body:
++ - meta_scope: meta.parens.lisp
++ - include: namespaces
++ - match: '{{identifier}}'
++ scope: entity.other.inherited-class.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ - include: comments
++ - include: paren-end
++
++ class-declaration-slots:
++ - meta_content_scope: meta.class.lisp
++ - include: paren-pop
++ - include: lists
++ - include: expressions
++
++###[ FUNCTION DECLARATIONS ]###################################################
++
++ function-declaration:
++ # https://www.lispworks.com/documentation/HyperSpec/Body/s_lambda.htm
++ - match: (?i:lambda){{break}}
++ scope: meta.function.lisp keyword.declaration.function.inline.lisp
++ set:
++ - function-body
++ - function-parameter-list
++ # https://www.lispworks.com/documentation/HyperSpec/Body/m_defun.htm
++ - match: (?i:def(?:[a-z]+f)?un|defgeneric|define-(?:command(?:-global)?|parenscript)){{break}}
++ scope: meta.function.lisp keyword.declaration.function.lisp
++ set:
++ - function-body
++ - function-parameter-list
++ - function-declaration-name
++ # https://www.lispworks.com/documentation/HyperSpec/Body/m_defmet.htm
++ - match: (?i:defmethod){{break}}
++ scope: meta.function.lisp keyword.declaration.function.lisp
++ set:
++ - function-body
++ - function-parameter-list
++ - method-qualifier
++ - function-declaration-name
++ # https://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm
++ - match: (?i:flet|labels){{break}}
++ scope: keyword.declaration.function.lisp
++ set: function-declaration-list
++
++ function-declaration-list:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ set: function-declaration-list-body
++ - include: comments
++ - include: else-pop
++
++ function-declaration-list-body:
++ - meta_scope: meta.parens.lisp
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ push:
++ - paren-end
++ - function-body
++ - function-parameter-list
++ - function-declaration-name
++ - include: comments
++ - include: paren-end
++
++ function-declaration-name:
++ - include: namespaces
++ - match: '{{identifier}}'
++ scope: entity.name.function.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++ method-qualifier:
++ # qualifiers may be anything but lists
++ - include: expressions
++ - include: else-pop
++
++ function-parameter-list:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parameters.begin.lisp
++ set: function-parameter-list-body
++ - include: comments
++ - include: else-pop
++
++ function-parameter-list-body:
++ - clear_scopes: 1
++ - meta_scope: meta.function.parameters.lisp
++ - match: \)
++ scope: punctuation.section.parameters.end.lisp
++ pop: 1
++ - include: comments
++ - include: annotations
++ - include: keywords
++ - include: modifiers
++ - include: parameters
++
++ function-body:
++ - meta_content_scope: meta.function.lisp
++ - include: paren-pop
++ - include: parens
++ - include: expressions
++
++###[ MACRO DECLARATIONS ]######################################################
++
++ macro-declaration:
++ # https://www.lispworks.com/documentation/HyperSpec/Body/m_defmac.htm
++ - match: (?i:defmacro){{break}}
++ scope: meta.macro.lisp keyword.declaration.macro.lisp
++ set:
++ - macro-body
++ - macro-parameter-list
++ - macro-declaration-name
++ # https://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm
++ - match: (?i:macrolet){{break}}
++ scope: keyword.declaration.macro.lisp
++ set: macro-declaration-list
++
++ macro-declaration-list:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ set: macro-declaration-list-body
++ - include: comments
++ - include: else-pop
++
++ macro-declaration-list-body:
++ - meta_scope: meta.parens.lisp
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ push:
++ - paren-end
++ - macro-body
++ - macro-parameter-list
++ - macro-declaration-name
++ - include: comments
++ - include: paren-end
++
++ macro-declaration-name:
++ - include: namespaces
++ - match: '{{identifier}}'
++ scope: entity.name.macro.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++ macro-parameter-list:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parameters.begin.lisp
++ set: macro-parameter-list-body
++ - include: comments
++ - include: else-pop
++
++ macro-parameter-list-body:
++ - clear_scopes: 1
++ - meta_scope: meta.macro.parameters.lisp
++ - match: \)
++ scope: punctuation.section.parameters.end.lisp
++ pop: 1
++ - include: comments
++ - include: annotations
++ - include: keywords
++ - include: modifiers
++ - include: parameters
++
++ macro-body:
++ - meta_content_scope: meta.macro.lisp
++ - include: paren-pop
++ - include: parens
++ - include: expressions
++
++###[ STRUCT DECLARATIONS ]#####################################################
++
++ struct-declaration:
++ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_defstr.htm
++ - match: (?i:defstruct|define-struct){{break}}
++ scope: meta.struct.lisp keyword.declaration.struct.lisp
++ set:
++ - struct-declaration-body
++ - struct-declaration-name
++
++ struct-declaration-name:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ set:
++ - paren-body
++ - struct-declaration-qualified-name
++ - include: struct-declaration-qualified-name
++
++ struct-declaration-qualified-name:
++ - include: namespaces
++ - match: '{{identifier}}'
++ scope: entity.name.struct.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++ struct-declaration-body:
++ - meta_content_scope: meta.struct.lisp
++ - include: paren-pop
++ - include: lists
++ - include: expressions
++
++###[ TYPE DECLARATIONS ]#######################################################
++
++ type-declaration:
++ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_deftp.htm
++ - match: (?i:deftype|define-type){{break}}
++ scope: meta.type.lisp keyword.declaration.type.lisp
++ set:
++ - type-body
++ - type-parameter-list
++ - type-declaration-name
++
++ type-declaration-name:
++ - include: namespaces
++ - match: '{{identifier}}'
++ scope: entity.name.type.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++ type-parameter-list:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parameters.begin.lisp
++ set: type-parameter-list-body
++ - include: comments
++ - include: else-pop
++
++ type-parameter-list-body:
++ - clear_scopes: 1
++ - meta_scope: meta.type.parameters.lisp
++ - match: \)
++ scope: punctuation.section.parameters.end.lisp
++ pop: 1
++ - include: comments
++ - include: annotations
++ - include: keywords
++ - include: modifiers
++ - include: parameters
++
++ type-body:
++ - meta_content_scope: meta.type.lisp
++ - include: paren-pop
++ - include: parens
++ - include: expressions
++
++###[ VARIABLE DECLARATIONS ]###################################################
++
++ variable-declaration:
++ # https://www.lispworks.com/documentation/HyperSpec/Body/s_let_l.htm
++ - match: (?i:let\*?){{break}}
++ scope: keyword.declaration.variable.lisp
++ set: variable-declaration-list
++ # https://www.lispworks.com/documentation/lw445/CLHS/Body/m_defcon.htm
++ - match: (?i:defconstant){{break}}
++ scope: meta.declaration.lisp keyword.declaration.constant.lisp
++ set: constant-declaration-name
++ # https://www.lispworks.com/documentation/HyperSpec/Body/m_defpar.htm
++ - match: (?i:defparameter|defvar){{break}}
++ scope: meta.declaration.lisp keyword.declaration.variable.lisp
++ set: variable-declaration-name
++
++ variable-declaration-list:
++ - meta_include_prototype: false
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ set: variable-declaration-list-body
++ - include: comments
++ - include: else-pop
++
++ variable-declaration-list-body:
++ - meta_scope: meta.parens.lisp
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ push:
++ - paren-body
++ - variable-declaration-name
++ - match: '{{identifier}}'
++ scope: meta.declaration.lisp variable.other.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ - include: comments
++ - include: paren-end
++
++ constant-declaration-name:
++ - meta_content_scope: meta.declaration.lisp
++ - match: '{{identifier}}'
++ scope: meta.declaration.lisp constant.other.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++ variable-declaration-name:
++ - meta_content_scope: meta.declaration.lisp
++ - match: '{{identifier}}'
++ scope: meta.declaration.lisp variable.other.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++###[ OTHER DECLARATIONS ]######################################################
++
++ other-declaration:
++ - match: '{{declaration_keywords}}'
++ scope: keyword.declaration.lisp
++ pop: 1
++
++###[ DECLARE STATEMENTS ]######################################################
++
++ declare:
++ # https://www.lispworks.com/documentation/HyperSpec/Body/s_declar.htm
++ - match: (?i:declare){{break}}
++ scope: keyword.declaration.declare.lisp
++ set: declare-specifier-list
++
++ declare-specifier-list:
++ - match: \(
++ scope: punctuation.section.parens.begin.lisp
++ push:
++ - paren-body
++ - declare-identifier
++ - include: comments
++ - include: else-pop
++
++ declare-identifier:
++ - match: '{{declaration_identifiers}}'
++ scope: storage.modifier.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++###[ CONTROL FLOW STATEMENTS ]#################################################
+
+ control:
+- - match: \b(?i:with|while|when|unless|typecase|to|thereis|then|return-from name|return|repeat|prog*|prog|never|named|maplist|mapl|mapcon|mapcar|mapcan|mapc|loop|let|initially|if|from|for|finally|etypecase|else|dotimes|dolist|doing|do*|do|ctypecase|cond|case|block|as|always)\b
++ # Conditional
++ - match: (?i:if|case|cond|otherwise|unless|when|[ce]?typecase){{break}}
++ scope: keyword.control.conditional.lisp
++ pop: 1
++ # Flow
++ - match: (?i:return(?:-from)?){{break}}
++ scope: keyword.control.flow.return.lisp
++ pop: 1
++ # Loop
++ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_dolist.htm
++ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_dotime.htm
++ - match: (?i:dolist|dotimes){{break}}
++ scope: keyword.control.loop.lisp
++ set: expect-list
++ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_do_do.htm
++ - match: (?i:do\*?|do-(?:all-|external-)?symbols|iterate){{break}}
++ scope: keyword.control.loop.lisp
++ set: expect-lists-list
++ # Other
++ - match: (?xi:block|map(?:can|car|con|c|list|l)){{break}}
+ scope: keyword.control.lisp
++ pop: 1
++
++###[ LOOP STATEMENTS ]#########################################################
++
++ loop:
++ # https://www.lispworks.com/documentation/lw70/CLHS/Body/06_a.htm
++ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_loop.htm
++ - match: (?i:loop){{break}}
++ scope: keyword.control.loop.lisp
++ set: loop-body
++
++ loop-body:
++ - meta_scope: meta.loop.lisp
++ - include: paren-pop
++
++ # declaration keywords
++ - match: (?i:named){{break}}
++ scope: keyword.declaration.name.lisp
++ push: loop-name
++ - match: (?i:with){{break}}
++ scope: keyword.declaration.variable.lisp
++
++ # loop termination test keywords
++ - match: (?i:always|as|do|doing|for|never|repeat|thereis|until|while){{break}}
++ scope: keyword.control.loop.lisp
++ # conditional keywords
++ - match: (?i:end|else|if|then|unless|when){{break}}
++ scope: keyword.control.conditional.lisp
++ # control flow keywords
++ - match: (?i:finally|initially){{break}}
++ scope: keyword.control.flow.lisp
++ - match: (?i:return(?:-from)?){{break}}
++ scope: keyword.control.flow.return.lisp
+
+- functions:
+- - match: \b(?i:(defun|defmethod|defmacro))\b\s+([\w\-!?<>]*)
+- scope: meta.function.lisp
++ # operator keywords
++ - match: ={{break}} # can be both, assignment and comparison
++ scope: keyword.operator.lisp
++ - match: (?i:into){{break}}
++ scope: keyword.operator.assignment.lisp
++ - match: (?i:and){{break}}
++ scope: keyword.operator.logical.lisp
++ - match: |-
++ (?xi: across | above | being | below | by | each | in | of | on | the
++ | (?:down|up)?to | (?:up)?from | using ){{break}}
++ scope: keyword.other.loop.lisp
++
++ # expressions
++ - include: comments
++ - include: parens
++ - include: numbers
++ - include: strings
++ - include: annotations
++ - include: keywords
++ - include: quotes
++ - include: macros
++ - include: modifiers
++ - match: (?={{identifier}})
++ push: loop-identifier
++
++ loop-identifier:
++ - include: builtin-function
++ - include: identifier
++
++ loop-name:
++ - match: '{{identifier}}'
++ scope: entity.name.loop.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ - include: comments
++ - include: else-pop
++
++###[ QUOTE STATEMENTS ]########################################################
++
++ quote:
++ - match: (?i:quote){{break}}
++ scope: meta.function-call.lisp support.function.lisp
++ set: quote-args
++
++ quote-args:
++ - include: paren-pop
++ - include: quoted-parens
++ - include: expressions
++
++###[ FUNCTIONS ]###############################################################
++
++ builtin-function:
++ - match: '{{builtin_functions}}'
++ scope: meta.function-call.lisp support.function.lisp
++ pop: 1
++
++ other-function:
++ # functions starting with `make-` are most likely used as constructors
++ - match: make-{{identifier}}
++ scope: meta.function-call.lisp variable.function.constructor.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ # mutating functions changing data in-place end with !
++ - match: (?![+*#`'&]\S){{identifier}}\!{{break}}
++ scope: meta.function-call.lisp variable.function.mutating.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ # predicate functions returning boolean values end with ? or -p
++ - match: (?![+*#`'&]\S){{identifier}}(?:\?|-p){{break}}
++ scope: meta.function-call.lisp variable.function.predicate.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++ # anything not looking like global variable, constant or macro
++ - match: (?![+*#`'&]\S|{{builtin_constants}}|{{builtin_types}}){{identifier}}
++ scope: meta.function-call.lisp variable.function.lisp
++ captures:
++ 1: punctuation.definition.symbol.begin.lisp
++ 2: punctuation.definition.symbol.end.lisp
++ pop: 1
++
++###[ MACROS ]##################################################################
++
++ macros:
++ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node191.html
++ - include: macro-arrays
++ - include: macro-characters
++ - include: macro-conditionals
++ - include: macro-functions
++ - include: macro-numbers
++ - include: macro-pathnames
++ - include: macro-structures
++ - include: macro-throw-exceptions
++ - include: macro-variables
++ - include: macro-vectors
++
++ macro-conditionals:
++ # Feature-flags
++ - match: (#[-+])({{identifier}})?
++ captures:
++ 1: keyword.control.conditional.lisp
++ 2: constant.other.feature.lisp
++ 3: punctuation.definition.symbol.begin.lisp
++ 4: punctuation.definition.symbol.end.lisp
++
++ macro-arrays:
++ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node29.html
++ - match: (#\d*[aA])(\()
++ captures:
++ 1: punctuation.definition.array.lisp
++ 2: meta.parens.lisp punctuation.section.parens.begin.lisp
++ push: macro-array-body
++ - match: (#\d*[aA])({{identifier}})
++ captures:
++ 1: punctuation.definition.array.lisp
++ 2: variable.other.lisp
++ 3: punctuation.definition.symbol.begin.lisp
++ 4: punctuation.definition.symbol.end.lisp
++
++ macro-array-body:
++ - meta_scope: meta.array.lisp
++ - meta_content_scope: meta.parens.lisp
++ - match: \)
++ scope: meta.parens.lisp punctuation.section.parens.end.lisp
++ pop: 1
++ - include: parens
++ - include: expressions
++
++ macro-characters:
++ # Standard Characters
++ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node22.html
++ # Non-Standard Characters
++ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node24.html
++ # Character Attributes
++ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node25.html
++ - match: (#(\d*)\\){{char_attributes}}?(?i:Space|NewLine){{break}}
++ scope: constant.character.standard.lisp
++ captures:
++ 1: punctuation.definition.constant.lisp
++ 2: storage.modifier.attributes.lisp
++ - match: (#(\d*)\\){{char_attributes}}?(?i:Backspace|Tab|Linefeed|Page|Return|RubOut){{break}}
++ scope: constant.character.semi-standard.lisp
++ captures:
++ 1: punctuation.definition.constant.lisp
++ 2: storage.modifier.attributes.lisp
++ - match: (#(\d*)\\){{char_attributes}}?{{standard_char}}{{break}}
++ scope: constant.character.standard.lisp
+ captures:
+- 1: storage.type.function-type.lisp
+- 2: entity.name.function.lisp
+- - match: \b(?i:zerop|yes-or-no-p|y-or-n-p|write-to-string|write-string|write-char|write-byte|write|with-standard-io-syntax|with-slots|with-simple-restart|with-package-iterator|with-output-to-string|with-open-stream|with-open-file|with-input-from-string|with-hash-table-iterator|with-condition-restarts|with-compilation-unit|with-accessors|wild-pathname-p|warn|vectorp|vector-push-extend|vector-push|vector-pop|vector|variable-information|values-list|values|user-homedir-pathname|use-value|use-package|upper-case-p|upgraded-complex-part-type|upgraded-array-element-type|update-instance-for-redefined-class|update-instance-for-different-class|unuse-package|untrace|until-if|until|unread-char|union|unintern|unexport|typep|type-of|type-error-expected-type|type-error-datum|two-way-stream-output-stream|two-way-stream-input-stream|truncate|truename|tree-equal|translate-pathname|translate-logical-pathname|trace|to-alter|time|third|terpri|terminate-producing|tenth|tanh|tan|tailp|synonym-stream-symbol|symbolp|symbol-value|symbol-plist|symbol-package|symbol-name|symbol-function|sxhash|svref|summing|sum|subtypep|substitute-if-not|substitute-if|substitute|subst-if-not|subst-if|subst|subsetp|subseries|subseq|sublis|stringp|string>=|string>|string=|string<=|string<|string/=|string-upcase|string-trim|string-right-trim|string-not-lessp|string-not-greaterp|string-not-equal|string-lessp|string-left-trim|string-greaterp|string-equal|string-downcase|string-char-p|string-capitalize|string|streamp|stream-external-format|stream-error-stream|stream-element-type|store-value|step|standard-char-p|stable-sort|sqrt|split-if|split|special-form-p|sort|some|software-version|software-type|slot-value|slot-unbound|slot-missing|slot-makunbound|slot-exists-p|slot-boundp|sleep|sixth|sinh|sin|simple-vector-p|simple-string-p|simple-condition-format-string|simple-condition-format-arguments|simple-bit-vector-p|signum|signal|short-site-name|shiftf|shared-initialize|shadowing-import|shadow|seventh|setq|setf|set-syntax-from-char|set-pprint-dispatch|set-macro-character|set-exclusive-or|set-dispatch-macro-character|set-difference|set-char-bit|set|series|second|search|schar|scan-symbols|scan-sublists|scan-range|scan-plist|scan-multiple|scan-lists-of-lists-fringe|scan-lists-of-lists|scan-hash|scan-fn-inclusive|scan-fn|scan-file|scan-alist|scan|scale-float|sbit|rplacd|rplaca|row-major-aref|round|rotatef|room|reverse|revappend|result-of|restart-name|restart-case|restart-bind|rest|require|replace|rename-package|rename-file|remprop|remove-method|remove-duplicates|remove|remhash|remf|reinitialize-instance|reduce|realpart|realp|readtablep|readtable-case|read-preserving-whitespace|read-line|read-from-string|read-delimited-list|read-char-no-hang|read-char|read-byte|read|rationalp|rationalize|rational|rassoc-if-not|rassoc-if|rassoc|random-state-p|random|quote|pushnew|push|psetq|psetf|provide|progn|prog2|prog1|producing|proclaim|probe-file|print-unreadable-object|print-object|print|prin1|previous|pprint-tabular|pprint-tab|pprint-pop|pprint-newline|pprint-logical-block|pprint-linear|pprint-indent|pprint-fill|pprint-exit-if-list-exhausted|pprint-dispatch|positions|position-if-not|position-if|position|pop|plusp|phase|peek-char|pathnamep|pathname-version|pathname-type|pathname-name|pathname-match-p|pathname-host|pathname-directory|pathname-device|pathname|parse-namestring|parse-macro|parse-integer|pairlis|packagep|package-used-by-list|package-use-list|package-shadowing-symbols|package-nicknames|package-name|package-error-package|output-stream-p|open-stream-p|open|oddp|nunion|numerator|numberp|nthcdr|nth-value|nth|nsubstitute-if-not|nsubstitute-if|nsubstitute|nsubst-if-not|nsubst-if|nsubst|nsublis|nstring-upcase|nstring-downcase|nstring-capitalize|nset-exclusive-or|nset-difference|nreverse|nreconc|notevery|notany|no-next-method|no-applicable-method|ninth|nintersection|next-out|next-method-p|next-in|nconcing|nconc|nbutlast|namestring|name-char|multiple-value-setq|multiple-value-list|multiple-value-bind|muffle-warning|mismatch|minusp|minimizing|minimize|mingle|method-qualifiers|method-combination-error|merge-pathnames|merge|memberp|member-if-not|member-if|member|maximizing|maximize|mask-field|mask|mapping|maphash|map-into|map-fn|map|makunbound|make-two-way-stream|make-synonym-stream|make-symbol|make-string-output-stream|make-string-input-stream|make-string|make-sequence|make-random-state|make-pathname|make-package|make-load-form-saving-slots|make-load-form|make-list|make-instances-obsolete|make-instance|make-hash-table|make-echo-stream|make-dispatch-macro-character|make-condition|make-concatenated-stream|make-char|make-broadcast-stream|make-array|macroexpand-1|macroexpand|macro-function|machine-version|machine-type|machine-instance|lower-case-p|loop-finish|long-site-name|logtest|logorc2|logorc1|lognot|lognand|logical-pathname-translations|logical-pathname|logcount|logbitp|logandc2|logandc1|log|locally|load-logical-pathname-translations|load|listp|listen|list-length|list-all-packages|list*|list|lisp-implementation-version|lisp-implementation-type|length|ldiff|ldb-test|ldb|lcm|latch|last|lambda|keywordp|iterate|isqrt|invoke-restart|invoke-debugger|invalid-method-error|intersection|intern|interactive-stream-p|integerp|integer-length|integer-decode-float|int-char|inspect|input-stream-p|initialize-instance|in-package|import|imagpart|ignore-errors|identity|host-namestring|hash-table-test|hash-table-size|hash-table-rehash-threshold|hash-table-rehash-size|hash-table-p|hash-table-count|handler-case|handler-bind|graphic-char-p|gethash|getf|get-universal-time|get-setf-method-multiple-value|get-setf-method|get-properties|get-output-stream-string|get-internal-run-time|get-internal-real-time|get-decoded-time|get|gentemp|gensym|generic-function|generator|gcd|gathering|gatherer|functionp|function-lambda-expression|function-keywords|function-information|funcall|fourth|formatter|format|floor|floatp|float-sign|float-radix|float-precision|float-digits|float|first|finish-output|find-symbol|find-restart|find-package|find-method|find-if-not|find-if|find-class|find-all-symbols|find|fill-pointer|fill|file-write-date|file-string-length|file-position|file-namestring|file-length|file-error-pathname|file-author|fifth|ffloor|fdefinition|fboundp|f|expt|export|expand|exp|every|evenp|evalhook|eval|error|ensure-generic-function|enough-namestring|endp|encode-universal-time|enclose|encapsulated|elt|eighth|ed|echo-stream-output-stream|echo-stream-input-stream|ecase|dribble|dpb|documentation|do-symbols|do-external-symbols|do-all-symbols|disassemble|directory-namestring|directory|digit-char-p|digit-char|destructuring-bind|describe-object|describe|deposit-field|denominator|delete-package|delete-if-not|delete-if|delete-file|delete-duplicates|delete|defvar|deftype|defstruct|defpackage|define-setf-method|define-modify-macro|define-method-combination|define-declaration|define-condition|define-compiler-macro|defgeneric|defclass|decode-universal-time|decode-float|declaration-information|declaim|counting|count-if-not|count-if|count|cotruncate|cosh|cos|copy-tree|copy-symbol|copy-seq|copy-readtable|copy-pprint-dispatch|copy-list|copy-alist|continue|constantp|consp|cons|conjugate|concatenated-stream-streams|concatenate|compute-restarts|compute-applicable-methods|complexp|complex|complement|compiler-macroexpand-1|compiler-macroexpand|compiler-macro-function|compiler-let|compiled-function-p|compile-file-pathname|compile-file|compile|commonp|collecting-fn|collecting|collect-sum|collect-plist|collect-or|collect-nth|collect-nconc|collect-min|collect-max|collect-length|collect-last|collect-hash|collect-fn|collect-first|collect-file|collect-append|collect-and|collect-alist|collect|coerce|code-char|clrhash|close|clear-input|class-of|class-name|cis|chunk|choose-if|choose|check-type|characterp|character|char>=|char>|char=|char<=|char<|char/=|char-upcase|char-not-lessp|char-not-greaterp|char-not-equal|char-name|char-lessp|char-int|char-greaterp|char-font|char-equal|char-downcase|char-code|char-bits|char-bit|char|change-class|cerror|cell-error-name|ceiling|cdr|cddr|cdddr|cddddr|cdddar|cddar|cddadr|cddaar|cdar|cdadr|cdaddr|cdadar|cdaar|cdaadr|cdaaar|ccase|catenate|car|call-next-method|call-method|cadr|caddr|cadddr|caddar|cadar|cadadr|cadaar|caar|caadr|caaddr|caadar|caaar|caaadr|caaaar|byte-size|byte-position|byte|butlast|broadcast-stream-streams|break|boundp|both-case-p|boole|bit-xor|bit-vector-p|bit-orc2|bit-orc1|bit-not|bit-nor|bit-nand|bit-ior|bit-eqv|bit-andc2|bit-andc1|bit-and|bit|augment-environment|atom|atanh|atan|assoc-if-not|assoc-if|assoc|assert|asinh|asin|ash|arrayp|array-total-size|array-row-major-index|array-rank|array-in-bounds-p|array-has-fill-pointer-p|array-element-type|array-dimensions|array-dimension|arithmetic-error-operation|arithmetic-error-operands|aref|apropos-list|apropos|applyhook|apply|appending|append|alter|alphanumericp|alpha-char-p|adjustable-array-p|adjust-array|adjoin|add-method|acosh|acos|acons|abs|abort)\b
+- scope: support.function.lisp
++ 1: punctuation.definition.constant.lisp
++ 2: storage.modifier.attributes.lisp
++ - match: (#(\d*)\\){{char_attributes}}?{{identifier_char}}+{{break}}
++ scope: constant.character.non-standard.lisp
++ captures:
++ 1: punctuation.definition.constant.lisp
++ 2: storage.modifier.attributes.lisp
++
++ macro-functions:
++ # Function reference
++ - match: \#[Mm']
++ scope: punctuation.definition.function.lisp
++ push: macro-function-name
++
++ macro-function-name:
++ - include: namespaces
++ - include: operator
++ - include: builtin-function
++ - include: other-function
++ - include: immediately-pop
++
++ macro-numbers:
++ # binary rational numbers
++ - match: |-
++ (?xi)
++ ( \#(?: b | 2r ) )
++ ( [-+]? )
++ ( [01]+ (/) [01]+ )
++ {{break}}
++ scope: meta.number.rational.binary.lisp
++ captures:
++ 1: constant.numeric.base.lisp
++ 2: keyword.operator.arithmetic.lisp
++ 3: constant.numeric.value.lisp
++ 4: keyword.operator.arithmetic.lisp
++ # binary integer numbers
++ - match: |-
++ (?xi)
++ ( \#(?: b | 2r ) )
++ ( [-+]? )
++ ( [01]+ (?: (\.)(?![01]) | {{break}} ) )
++ scope: meta.number.integer.binary.lisp
++ captures:
++ 1: constant.numeric.base.lisp
++ 2: keyword.operator.arithmetic.lisp
++ 3: constant.numeric.value.lisp
++ 4: punctuation.separator.decimal.lisp
++ # octal rational numbers
++ - match: |-
++ (?xi)
++ ( \#(?: o | 8r ) )
++ ( [-+]? )
++ ( [0-7]+ (/) [0-7]+ )
++ {{break}}
++ scope: meta.number.rational.octal.lisp
++ captures:
++ 1: constant.numeric.base.lisp
++ 2: keyword.operator.arithmetic.lisp
++ 3: constant.numeric.value.lisp
++ 4: keyword.operator.arithmetic.lisp
++ # octal integer numbers
++ - match: |-
++ (?xi)
++ ( \#(?: o | 8r ) )
++ ( [-+]? )
++ ( [0-7]+ (?: (\.)(?![0-7]) | {{break}} ) )
++ scope: meta.number.integer.octal.lisp
++ captures:
++ 1: constant.numeric.base.lisp
++ 2: keyword.operator.arithmetic.lisp
++ 3: constant.numeric.value.lisp
++ 4: punctuation.separator.decimal.lisp
++ # hexadecimal rational numbers
++ - match: |-
++ (?xi)
++ ( \#(?: x | 16r ) )
++ ( [-+]? )