Repository: tree-sitter-grammars/tree-sitter-commonlisp (language: python)

Issue:
Consider a more permissive license?
I'd love to include tree-sitter-commonlisp in [difftastic](https://github.com/wilfred/difftastic), but this grammar is GPL unlike the other tree-sitter grammars available.

Would you be willing to relicense to something like MIT?

I understand this is a very personal thing, so no worries if you'd rather not.


Discussion / hints:

Fix patch:
diff --git a/LICENSE.md b/LICENSE.md
index 216c8ea..09ba2f7 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,16 +1,21 @@
-tree-sitter-common-lisp
-Copyright © 2021 Stephan Seitz
+The MIT License (MIT)
 
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+Copyright (c) 2021 Stephan Seitz
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
 
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/grammar.js b/grammar.js
index 81a2cf8..0725052 100644
--- a/grammar.js
+++ b/grammar.js
@@ -25,10 +25,10 @@ const PREC = {
 }
 
 const SYMBOL_HEAD =
-    /[^:\f\n\r\t ()\[\]{}"@^;`\\,#'\u000B\u001C\u001D\u001E\u001F\u2028\u2029\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2008\u2009\u200a\u205f\u3000]/;
+    /[^:\f\n\r\t ()\[\]{}"^;`\\,#'\u000B\u001C\u001D\u001E\u001F\u2028\u2029\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2008\u2009\u200a\u205f\u3000]/;
 
 const SYMBOL_WITHOUT_SLASH =
-    /[^:\f\n\r\t ()\[\]{}"@^;/`\\,#'\u000B\u001C\u001D\u001E\u001F\u2028\u2029\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2008\u2009\u200a\u205f\u3000]/;
+    /[^:\f\n\r\t ()\[\]{}"^;/`\\,#'\u000B\u001C\u001D\u001E\u001F\u2028\u2029\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2008\u2009\u200a\u205f\u3000]/;
 
 const SYMBOL_BODY =
     choice(SYMBOL_HEAD,
@@ -320,7 +320,7 @@ module.exports = grammar(clojure, {
         kwd_symbol: _ =>
             seq(SYMBOL),
 
-        self_referential_reader_macro: _ => /#\d+[=#]/, 
+        self_referential_reader_macro: _ => /#\d+[=#]/,
 
         _form: $ =>
             seq(optional('#'),
diff --git a/package-lock.json b/package-lock.json
index 98f9809..3fbaea9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,25 +5,26 @@
   "requires": true,
   "packages": {
     "": {
+      "name": "tree-sitter-commonlisp",
       "version": "0.2.0",
       "license": "GPL-3.0-or-later",
       "dependencies": {
         "nan": "^2.14.2",
-        "tree-sitter-clojure": "git://github.com:sogaiu/tree-sitter-clojure.git#95c7959c461406381b42113dcf4591008c663d21"
+        "tree-sitter-clojure": "git@github.com:theHamsta/tree-sitter-clojure-1.git#95c7959c461406381b42113dcf4591008c663d21"
       },
       "devDependencies": {
         "tree-sitter-cli": "^0.19.4"
       }
     },
     "node_modules/nan": {
-      "version": "2.14.2",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
-      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
+      "version": "2.15.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
+      "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
     },
     "node_modules/tree-sitter-cli": {
-      "version": "0.19.4",
-      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.19.4.tgz",
-      "integrity": "sha512-p2kxjuoQeauXBu5eE+j7c5BMCRXmc17EiAswnnWn3ieUlHXBkA0Z7vRnaCSElDR34MhZnSgqgzuuzQk0cDqCjw==",
+      "version": "0.19.5",
+      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.19.5.tgz",
+      "integrity": "sha512-kRzKrUAwpDN9AjA3b0tPBwT1hd8N2oQvvvHup2OEsX6mdsSMLmAvR+NSqK9fe05JrRbVvG8mbteNUQsxlMQohQ==",
       "dev": true,
       "hasInstallScript": true,
       "bin": {
@@ -32,13 +33,18 @@
     },
     "node_modules/tree-sitter-clojure": {
       "version": "0.0.8",
-      "resolved": "git+ssh://git@github.com/sogaiu/tree-sitter-clojure.git#95c7959c461406381b42113dcf4591008c663d21",
-      "integrity": "sha512-2xqcFlQ/TC+M0mx8jIkKYMnMd5rR0nkMDSEZLpILMuPHH1KFWc7tK4Wof2O7TYhZ3bibSR7htZ+XAINew+9JGQ==",
+      "resolved": "git+ssh://git@github.com/theHamsta/tree-sitter-clojure-1.git#95c7959c461406381b42113dcf4591008c663d21",
+      "integrity": "sha512-h8iD1D2l7Qfrktam6y2KAU5K2SRI4lGHL2NCbJG9bmqiY8yTylkK6iJCwkoGLYapjVgxWUDAgaR9tRW5k3q1+g==",
       "dependencies": {
         "nan": "2.14.2",
         "web-tree-sitter": "0.19.1"
       }
     },
+    "node_modules/tree-sitter-clojure/node_modules/nan": {
+      "version": "2.14.2",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
+    },
     "node_modules/web-tree-sitter": {
       "version": "0.19.1",
       "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.1.tgz",
@@ -47,23 +53,30 @@
   },
   "dependencies": {
     "nan": {
-      "version": "2.14.2",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
-      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
+      "version": "2.15.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
+      "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
     },
     "tree-sitter-cli": {
-      "version": "0.19.4",
-      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.19.4.tgz",
-      "integrity": "sha512-p2kxjuoQeauXBu5eE+j7c5BMCRXmc17EiAswnnWn3ieUlHXBkA0Z7vRnaCSElDR34MhZnSgqgzuuzQk0cDqCjw==",
+      "version": "0.19.5",
+      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.19.5.tgz",
+      "integrity": "sha512-kRzKrUAwpDN9AjA3b0tPBwT1hd8N2oQvvvHup2OEsX6mdsSMLmAvR+NSqK9fe05JrRbVvG8mbteNUQsxlMQohQ==",
       "dev": true
     },
     "tree-sitter-clojure": {
-      "version": "git+ssh://git@github.com/sogaiu/tree-sitter-clojure.git#95c7959c461406381b42113dcf4591008c663d21",
-      "integrity": "sha512-2xqcFlQ/TC+M0mx8jIkKYMnMd5rR0nkMDSEZLpILMuPHH1KFWc7tK4Wof2O7TYhZ3bibSR7htZ+XAINew+9JGQ==",
-      "from": "tree-sitter-clojure@git://github.com:sogaiu/tree-sitter-clojure.git#95c7959c461406381b42113dcf4591008c663d21",
+      "version": "git+ssh://git@github.com/theHamsta/tree-sitter-clojure-1.git#95c7959c461406381b42113dcf4591008c663d21",
+      "integrity": "sha512-h8iD1D2l7Qfrktam6y2KAU5K2SRI4lGHL2NCbJG9bmqiY8yTylkK6iJCwkoGLYapjVgxWUDAgaR9tRW5k3q1+g==",
+      "from": "tree-sitter-clojure@git@github.com:theHamsta/tree-sitter-clojure-1.git#95c7959c461406381b42113dcf4591008c663d21",
       "requires": {
         "nan": "2.14.2",
         "web-tree-sitter": "0.19.1"
+      },
+      "dependencies": {
+        "nan": {
+          "version": "2.14.2",
+          "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+          "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
+        }
       }
     },
     "web-tree-sitter": {
diff --git a/package.json b/package.json
index 2c4093c..d0e0390 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
   "license": "GPL-3.0-or-later",
   "dependencies": {
     "nan": "^2.14.2",
-    "tree-sitter-clojure": "git://github.com:sogaiu/tree-sitter-clojure.git#95c7959c461406381b42113dcf4591008c663d21"
+    "tree-sitter-clojure": "git@github.com:theHamsta/tree-sitter-clojure-1.git#95c7959c461406381b42113dcf4591008c663d21"
   },
   "repository": {
     "type": "git",
diff --git a/src/grammar.json b/src/grammar.json
index 0503504..45a6495 100644
--- a/src/grammar.json
+++ b/src/grammar.json
@@ -807,7 +807,7 @@
             "members": [
               {
                 "type": "PATTERN",
-                "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"@^;`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
+                "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"^;`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
               },
               {
                 "type": "REPEAT",
@@ -816,7 +816,7 @@
                   "members": [
                     {
                       "type": "PATTERN",
-                      "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"@^;`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
+                      "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"^;`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
                     },
                     {
                       "type": "PATTERN",
@@ -1645,39 +1645,8 @@
       ]
     },
     "derefing_lit": {
-      "type": "SEQ",
-      "members": [
-        {
-          "type": "REPEAT",
-          "content": {
-            "type": "SYMBOL",
-            "name": "_metadata_lit"
-          }
-        },
-        {
-          "type": "FIELD",
-          "name": "marker",
-          "content": {
-            "type": "STRING",
-            "value": "@"
-          }
-        },
-        {
-          "type": "REPEAT",
-          "content": {
-            "type": "SYMBOL",
-            "name": "_gap"
-          }
-        },
-        {
-          "type": "FIELD",
-          "name": "value",
-          "content": {
-            "type": "SYMBOL",
-            "name": "_form"
-          }
-        }
-      ]
+      "type": "SYMBOL",
+      "name": "complex_num_lit"
     },
     "quoting_lit": {
       "type": "SEQ",
@@ -4131,7 +4100,7 @@
         "type": "REPEAT1",
         "content": {
           "type": "PATTERN",
-          "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"@^;/`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
+          "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"^;/`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
         }
       },
       "named": true,
@@ -4147,7 +4116,7 @@
             "members": [
               {
                 "type": "PATTERN",
-                "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"@^;`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
+                "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"^;`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
               },
               {
                 "type": "REPEAT",
@@ -4156,7 +4125,7 @@
                   "members": [
                     {
                       "type": "PATTERN",
-                      "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"@^;`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
+                      "value": "[^:\\f\\n\\r\\t ()\\[\\]{}\"^;`\\\\,#'\\u000B\\u001C\\u001D\\u001E\\u001F\\u2028\\u2029\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2008\\u2009\\u200a\\u205f\\u3000]"
                     },
                     {
                       "type": "PATTERN",
diff --git a/src/parser.c b/src/parser.c
index 3d4328a..19dc9ed 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -61,16 +61,16 @@ enum {
   anon_sym_POUND_QMARK = 34,
   anon_sym_POUND_QMARK_AT = 35,
   anon_sym_POUND_SQUOTE = 36,
-  anon_sym_AT = 37,
-  anon_sym_SQUOTE = 38,
-  anon_sym_BQUOTE = 39,
-  anon_sym_COMMA_AT = 40,
-  anon_sym_COMMA = 41,
-  sym_block_comment = 42,
-  sym_fancy_literal = 43,
-  aux_sym__format_token_token1 = 44,
-  anon_sym_v = 45,
-  anon_sym_V = 46,
+  anon_sym_SQUOTE = 37,
+  anon_sym_BQUOTE = 38,
+  anon_sym_COMMA_AT = 39,
+  anon_sym_COMMA = 40,
+  sym_block_comment = 41,
+  sym_fancy_literal = 42,
+  aux_sym__format_token_token1 = 43,
+  anon_sym_v = 44,
+  anon_sym_V = 45,
+  anon_sym_AT = 46,
   anon_sym_AT_COLON = 47,
   anon_sym_COLON_AT = 48,
   anon_sym_PERCENT = 49,
@@ -214,7 +214,7 @@ enum {
   aux_sym__sym_lit_without_slash_repeat1 = 187,
 };
 
-static const char *ts_symbol_names[] = {
+static const char * const ts_symbol_names[] = {
   [ts_builtin_sym_end] = "end",
   [sym__ws] = "_ws",
   [sym_comment] = "comment",
@@ -252,7 +252,6 @@ static const char *ts_symbol_names[] = {
   [anon_sym_POUND_QMARK] = "#\?",
   [anon_sym_POUND_QMARK_AT] = "#\?@",
   [anon_sym_POUND_SQUOTE] = "#'",
-  [anon_sym_AT] = "@",
   [anon_sym_SQUOTE] = "'",
   [anon_sym_BQUOTE] = "`",
   [anon_sym_COMMA_AT] = ",@",
@@ -262,6 +261,7 @@ static const char *ts_symbol_names[] = {
   [aux_sym__format_token_token1] = "char_lit",
   [anon_sym_v] = "v",
   [anon_sym_V] = "V",
+  [anon_sym_AT] = "@",
   [anon_sym_AT_COLON] = "@:",
   [anon_sym_COLON_AT] = ":@",
   [anon_sym_PERCENT] = "%",
@@ -405,7 +405,7 @@ static const char *ts_symbol_names[] = {
   [aux_sym__sym_lit_without_slash_repeat1] = "_sym_lit_without_slash_repeat1",
 };
 
-static TSSymbol ts_symbol_map[] = {
+static const TSSymbol ts_symbol_map[] = {
   [ts_builtin_sym_end] = ts_builtin_sym_end,
   [sym__ws] = sym__ws,
   [sym_comment] = sym_comment,
@@ -443,7 +443,6 @@ static TSSymbol ts_symbol_map[] = {
   [anon_sym_POUND_QMARK] = anon_sym_POUND_QMARK,
   [anon_sym_POUND_QMARK_AT] = anon_sym_POUND_QMARK_AT,
   [anon_sym_POUND_SQUOTE] = anon_sym_POUND_SQUOTE,
-  [anon_sym_AT] = anon_sym_AT,
   [anon_sym_SQUOTE] = anon_sym_SQUOTE,
   [anon_sym_BQUOTE] = anon_sym_BQUOTE,
   [anon_sym_COMMA_AT] = anon_sym_COMMA_AT,
@@ -453,6 +452,7 @@ static TSSymbol ts_symbol_map[] = {
   [aux_sym__format_token_token1] = sym_char_lit,
   [anon_sym_v] = anon_sym_v,
   [anon_sym_V] = anon_sym_V,
+  [anon_sym_AT] = anon_sym_AT,
   [anon_sym_AT_COLON] = anon_sym_AT_COLON,
   [anon_sym_COLON_AT] = anon_sym_COLON_AT,
   [anon_sym_PERCENT] = anon_sym_PERCENT,
@@ -745,10 +745,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
     .visible = true,
     .named = false,
   },
-  [anon_sym_AT] = {
-    .visible = true,
-    .named = false,
-  },
   [anon_sym_SQUOTE] = {
     .visible = true,
     .named = false,
@@ -785,6 +781,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
     .visible = true,
     .named = false,
   },
+  [anon_sym_AT] = {
+    .visible = true,
+    .named = false,
+  },
   [anon_sym_AT_COLON] = {
     .visible = true,
     .named = false,
@@ -1374,7 +1374,7 @@ enum {
   field_variable = 20,
 };
 
-static const char *ts_field_names[] = {
+static const char * const ts_field_names[] = {
   [0] = NULL,
   [field_close] = "close",
   [field_condition] = "condition",
@@ -2267,7 +2267,7 @@ static const TSFieldMapEntry ts_field_map_entries[] = {
     {field_type, 6},
 };
 
-static TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = {
+static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = {
   [0] = {0},
   [8] = {
     [0] = sym_vec_lit,
@@ -2298,7 +2298,7 @@ static TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGT
   },
 };
 
-static uint16_t ts_non_terminal_alias_map[] = {
+static const uint16_t ts_non_terminal_alias_map[] = {
   sym_list_lit, 2,
     sym_list_lit,
     sym_vec_lit,
@@ -2342,9 +2342,9 @@ static inline bool aux_sym_sym_lit_token1_character_set_1(int32_t c) {
       ? (c < '\t'
         ? c == 0
         : (c <= '\r' || (c >= 28 && c <= ' ')))
-      : (c <= ')' || (c < '@'
+      : (c <= ')' || (c < '['
         ? c == ';'
-        : (c <= '@' || (c >= '[' && c <= ']')))))
+        : c <= ']')))
     : (c <= '}' || (c < 8232
       ? (c < 8192
         ? c == 5760
@@ -2356,15 +2356,13 @@ static inline bool aux_sym_sym_lit_token1_character_set_1(int32_t c) {
 
 static inline bool aux_sym_sym_lit_token1_character_set_2(int32_t c) {
   return (c < '`'
-    ? (c < ')'
-      ? (c < 28
-        ? (c < '\t'
-          ? c == 0
-          : c <= '\r')
-        : (c <= ' ' || c == '"'))
-      : (c <= ')' || (c < '@'
-        ? (c >= ':' && c <= ';')
-        : (c <= '@' || (c >= '[' && c <= ']')))))
+    ? (c < '"'
+      ? (c < '\t'
+        ? c == 0
+        : (c <= '\r' || (c >= 28 && c <= ' ')))
+      : (c <= '"' || (c < ':'
+        ? c == ')'
+        : (c <= ';' || (c >= '[' && c <= ']')))))
     : (c <= '`' || (c < 8200
       ? (c < 5760
         ? c == '}'
@@ -2382,11 +2380,9 @@ static inline bool aux_sym_sym_lit_token1_character_set_3(int32_t c) {
           ? c == 0
           : c <= '\r')
         : (c <= ' ' || c == '"'))
-      : (c <= ')' || (c < '@'
-        ? (c < ':'
-          ? c == ','
-          : c <= ';')
-        : (c <= '@' || (c >= '[' && c <= '^')))))
+      : (c <= ')' || (c < ':'
+        ? c == ','
+        : (c <= ';' || (c >= '[' && c <= '^')))))
     : (c <= '`' || (c < 8200
       ? (c < 5760
         ? (c < '}'
@@ -2406,11 +2402,9 @@ static inline bool aux_sym_sym_lit_token1_character_set_4(int32_t c) {
           ? c == 0
           : c <= '\r')
         : (c <= ' ' || c == '"'))
-      : (c <= ')' || (c < '@'
-        ? (c < ':'
-          ? c == ','
-          : c <= ';')
-        : (c <= '@' || (c >= '[' && c <= '^')))))
+      : (c <= ')' || (c < ':'
+        ? c == ','
+        : (c <= ';' || (c >= '[' && c <= '^')))))
     : (c <= '`' || (c < 8200
       ? (c < 5760
         ? (c < '}'
@@ -2434,7 +2428,7 @@ static inline bool aux_sym_sym_lit_token1_character_set_5(int32_t c) {
           : c <= ',')))
       : (c <= ';' || (c < 'L'
         ? (c < 'D'
-          ? (c >= '@' && c <= 'A')
+          ? c == 'A'
           : c <= 'F')
         : (c <= 'N' || (c < '['
           ? c == 'S'
@@ -2458,17 +2452,17 @@ static inline bool aux_sym_sym_lit_token1_character_set_5(int32_t c) {
 
 static inline bool aux_sym_sym_lit_token1_character_set_6(int32_t c) {
   return (c < '`'
-    ? (c < '0'
-      ? (c < '"'
+    ? (c < ','
+      ? (c < 28
         ? (c < '\t'
           ? c == 0
-          : (c <= '\r' || (c >= 28 && c <= ' ')))
-        : (c <= '"' || (c < ','
-          ? (c >= '(' && c <= ')')
-          : c <= ',')))
-      : (c <= ';' || (c < 'L'
+          : c <= '\r')
+        : (c <= ' ' || (c < '('
+          ? c == '"'
+          : c <= ')')))
+      : (c <= ',' || (c < 'L'
         ? (c < 'D'
-          ? c == '@'
+          ? (c >= '0' && c <= ';')
           : c <= 'F')
         : (c <= 'N' || (c < '['
           ? c == 'S'
@@ -2500,7 +2494,7 @@ static inline bool aux_sym_sym_lit_token1_character_set_7(int32_t c) {
         : (c <= ' ' || c == '"'))
       : (c <= ')' || (c < '0'
         ? c == ','
-        : (c <= ';' || (c >= '@' && c <= '^')))))
+        : (c <= ';' || (c >= 'A' && c <= '^')))))
     : (c <= '{' || (c < 8200
       ? (c < 5760
         ? c == '}'
@@ -2518,7 +2512,7 @@ static inline bool aux_sym_sym_lit_token1_character_set_8(int32_t c) {
           ? c == 0
           : c <= '\r')
         : (c <= ' ' || c == '"'))
-      : (c <= ')' || (c < '@'
+      : (c <= ')' || (c < 'A'
         ? (c < '0'
           ? c == ','
           : c <= ';')
@@ -2536,17 +2530,17 @@ static inline bool aux_sym_sym_lit_token1_character_set_8(int32_t c) {
 
 static inline bool aux_sym_sym_lit_token1_character_set_9(int32_t c) {
   return (c < '`'
-    ? (c < '0'
-      ? (c < '"'
+    ? (c < ','
+      ? (c < 28
         ? (c < '\t'
           ? c == 0
-          : (c <= '\r' || (c >= 28 && c <= ' ')))
-        : (c <= '"' || (c < ','
-          ? (c >= '(' && c <= ')')
-          : c <= ',')))
-      : (c <= ';' || (c < 'L'
+          : c <= '\r')
+        : (c <= ' ' || (c < '('
+          ? c == '"'
+          : c <= ')')))
+      : (c <= ',' || (c < 'L'
         ? (c < 'D'
-          ? c == '@'
+          ? (c >= '0' && c <= ';')
           : c <= 'F')
         : (c <= 'L' || (c < '['
           ? c == 'S'
@@ -2576,11 +2570,9 @@ static inline bool aux_sym_sym_lit_token1_character_set_10(int32_t c) {
           ? c == 0
           : c <= '\r')
         : (c <= ' ' || c == '"'))
-      : (c <= ')' || (c < '@'
-        ? (c < '0'
-          ? c == ','
-          : c <= ';')
-        : (c <= '@' || (c >= '[' && c <= '^')))))
+      : (c <= ')' || (c < '0'
+        ? c == ','
+        : (c <= ';' || (c >= '[' && c <= '^')))))
     : (c <= '`' || (c < 8200
       ? (c < 5760
         ? (c < '}'
@@ -2593,7 +2585,7 @@ static inline bool aux_sym_sym_lit_token1_character_set_10(int32_t c) {
 }
 
 static inline bool aux_sym_sym_lit_token1_character_set_11(int32_t c) {
-  return (c < '['
+  return (c < '`'
     ? (c < '('
       ? (c < 28
         ? (c < '\t'
@@ -2604,22 +2596,20 @@ static inline bool aux_sym_sym_lit_token1_character_set_11(int32_t c) {
         ? (c < '0'
           ? c == ','
           : c <= '7')
-        : (c <= ';' || c == '@'))))
-    : (c <= '^' || (c < 8192
-      ? (c < '}'
-        ? (c < '{'
-          ? c == '`'
-          : c <= '{')
-        : (c <= '}' || c == 5760))
-      : (c <= 8198 || (c < 8287
-        ? (c < 8232
-          ? (c >= 8200 && c <= 8202)
-          : c <= 8233)
+        : (c <= ';' || (c >= '[' && c <= '^')))))
+    : (c <= '`' || (c < 8200
+      ? (c < 5760
+        ? (c < '}'
+          ? c == '{'
+          : c <= '}')
+        : (c <= 5760 || (c >= 8192 && c <= 8198)))
+      : (c <= 8202 || (c < 8287
+        ? (c >= 8232 && c <= 8233)
         : (c <= 8287 || c == 12288))))));
 }
 
 static inline bool aux_sym_sym_lit_token1_character_set_12(int32_t c) {
-  return (c < '['
+  return (c < '`'
     ? (c < '('
       ? (c < 28
         ? (c < '\t'
@@ -2630,22 +2620,20 @@ static inline bool aux_sym_sym_lit_token1_character_set_12(int32_t c) {
         ? (c < '0'
           ? c == ','
           : c <= '1')
-        : (c <= ';' || c == '@'))))
-    : (c <= '^' || (c < 8192
-      ? (c < '}'
-        ? (c < '{'
-          ? c == '`'
-          : c <= '{')
-        : (c <= '}' || c == 5760))
-      : (c <= 8198 || (c < 8287
-        ? (c < 8232
-          ? (c >= 8200 && c <= 8202)
-          : c <= 8233)
+        : (c <= ';' || (c >= '[' && c <= '^')))))
+    : (c <= '`' || (c < 8200
+      ? (c < 5760
+        ? (c < '}'
+          ? c == '{'
+          : c <= '}')
+        : (c <= 5760 || (c >= 8192 && c <= 8198)))
+      : (c <= 8202 || (c < 8287
+        ? (c >= 8232 && c <= 8233)
         : (c <= 8287 || c == 12288))))));
 }
 
 static inline bool aux_sym_sym_lit_token1_character_set_13(int32_t c) {
-  return (c < '['
+  return (c < '`'
     ? (c < '('
       ? (c < 28
         ? (c < '\t'
@@ -2654,12 +2642,10 @@ static inline bool aux_sym_sym_lit_token1_character_set_13(int32_t c) {
         : (c <= ' ' || c == '"'))
       : (c <= ')' || (c < ':'
         ? c == ','
-        : (c <= ';' || c == '@'))))
-    : (c <= '^' || (c < 8200
+        : (c <= ';' || (c >= '[' && c <= '^')))))
+    : (c <= '`' || (c < 8200
       ? (c < 5760
-        ? (c < '{'
-          ? c == '`'
-          : c <= '}')
+        ? (c >= '{' && c <= '}')
         : (c <= 5760 || (c >= 8192 && c <= 8198)))
       : (c <= 8202 || (c < 8287
         ? (c >= 8232 && c <= 8233)
@@ -2674,7 +2660,7 @@ static inline bool aux_sym_sym_lit_token1_character_set_14(int32_t c) {
           ? c == 0
           : c <= '\r')
         : (c <= ' ' || c == '"'))
-      : (c <= ')' || (c < '@'
+      : (c <= ')' || (c < 'A'
         ? (c < '0'
           ? (c >= '+' && c <= '-')
           : c <= ';')
@@ -2698,11 +2684,9 @@ static inline bool aux_sym_sym_lit_token1_character_set_15(int32_t c) {
           ? c == 0
           : c <= '\r')
         : (c <= ' ' || c == '"'))
-      : (c <= ')' || (c < '@'
-        ? (c < '0'
-          ? (c >= '+' && c <= '-')
-          : c <= ';')
-        : (c <= '@' || (c >= '[' && c <= '^')))))
+      : (c <= ')' || (c < '0'
+        ? (c >= '+' && c <= '-')
+        : (c <= ';' || (c >= '[' && c <= '^')))))
     : (c <= '`' || (c < 8200
       ? (c < 5760
         ? (c < '}'
@@ -2716,18 +2700,16 @@ static inline bool aux_sym_sym_lit_token1_character_set_15(int32_t c) {
 
 static inline bool aux_sym_sym_lit_token1_character_set_16(int32_t c) {
   return (c < '`'
-    ? (c < ','
+    ? (c < '('
       ? (c < 28
         ? (c < '\t'
           ? c == 0
           : c <= '\r')
-        : (c <= ' ' || (c < '('
-          ? c == '"'
-          : c <= ')')))
-      : (c <= ',' || (c < 'R'
-        ? (c < '@'
-          ? (c >= '0' && c <= ';')
-          : c <= '@')
+        : (c <= ' ' || c == '"'))
+      : (c <= ')' || (c < 'R'
+        ? (c < '0'
+          ? c == ','
+          : c <= ';')
         : (c <= 'R' || (c >= '[' && c <= '^')))))
     : (c <= '`' || (c < 8192
       ? (c < '}'
@@ -2743,7 +2725,7 @@ static inline bool aux_sym_sym_lit_token1_character_set_16(int32_t c) {
 }
 
 static inline bool aux_sym_sym_lit_token1_character_set_17(int32_t c) {
-  return (c < '['
+  return (c < '`'
     ? (c < '('
       ? (c < 28
         ? (c < '\t'
@@ -2754,22 +2736,20 @@ static inline bool aux_sym_sym_lit_token1_character_set_17(int32_t c) {
         ? (c < '0'
           ? (c >= '+' && c <= '-')
           : c <= '7')
-        : (c <= ';' || c == '@'))))
-    : (c <= '^' || (c < 8192
-      ? (c < '}'
-        ? (c < '{'
-          ? c == '`'
-          : c <= '{')
-        : (c <= '}' || c == 5760))
-      : (c <= 8198 || (c < 8287
-        ? (c < 8232
-          ? (c >= 8200 && c <= 8202)
-          : c <= 8233)
+        : (c <= ';' || (c >= '[' && c <= '^')))))
+    : (c <= '`' || (c < 8200
+      ? (c < 5760
+        ? (c < '}'
+          ? c == '{'
+          : c <= '}')
+        : (c <= 5760 || (c >= 8192 && c <= 8198)))
+      : (c <= 8202 || (c < 8287
+        ? (c >= 8232 && c <= 8233)
         : (c <= 8287 || c == 12288))))));
 }
 
 static inline bool aux_sym_sym_lit_token1_character_set_18(int32_t c) {
-  return (c < '['
+  return (c < '`'
     ? (c < '('
       ? (c < 28
         ? (c < '\t'
@@ -2780,17 +2760,15 @@ static inline bool aux_sym_sym_lit_token1_character_set_18(int32_t c) {
         ? (c < '0'
           ? (c >= '+' && c <= '-')
           : c <= '1')
-        : (c <= ';' || c == '@'))))
-    : (c <= '^' || (c < 8192
-      ? (c < '}'
-        ? (c < '{'
-          ? c == '`'
-          : c <= '{')
-        : (c <= '}' || c == 5760))
-      : (c <= 8198 || (c < 8287
-        ? (c < 8232
-          ? (c >= 8200 && c <= 8202)
-          : c <= 8233)
+        : (c <= ';' || (c >= '[' && c <= '^')))))
+    : (c <= '`' || (c < 8200
+      ? (c < 5760
+        ? (c < '}'
+          ? c == '{'
+          : c <= '}')
+        : (c <= 5760 || (c >= 8192 && c <= 8198)))
+      : (c <= 8202 || (c < 8287
+        ? (c >= 8232 && c <= 8233)
         : (c <= 8287 || c == 12288))))));
 }
 
@@ -2802,11 +2780,9 @@ static inline bool aux_sym_sym_lit_token1_character_set_19(int32_t c) {
           ? c == 0
           : c <= '\r')
         : (c <= 31 || c == '"'))
-      : (c <= ')' || (c < '@'
-        ? (c < ':'
-          ? c == ','
-          : c <= ';')
-        : (c <= '@' || (c >= '[' && c <= '^')))))
+      : (c <= ')' || (c < ':'
+        ? c == ','
+        : (c <= ';' || (c >= '[' && c <= '^')))))
     : (c <= '`' || (c < 8200
       ? (c < 5760
         ? (c < '}'
@@ -2820,15 +2796,13 @@ static inline bool aux_sym_sym_lit_token1_character_set_19(int32_t c) {
 
 static inline bool sym_fancy_literal_character_set_1(int32_t c) {
   return (c < '`'
-    ? (c < ','
-      ? (c < '"'
-        ? (c < 28
-          ? (c >= '\t' && c <= '\r')
-          : c <= ' ')
-        : (c <= '"' || (c >= '(' && c <= ')')))
-      : (c <= ',' || (c < '@'
-        ? (c >= ':' && c <= ';')
-        : (c <= '@' || (c >= '[' && c <= '^')))))
+    ? (c < '('
+      ? (c < 28
+        ? (c >= '\t' && c <= '\r')
+        : (c <= ' ' || c == '"'))
+      : (c <= ')' || (c < ':'
+        ? c == ','
+        : (c <= ';' || (c >= '[' && c <= '^')))))
     : (c <= '`' || (c < 8200
       ? (c < 5760
         ? (c >= '{' && c <= '}')
@@ -2846,11 +2820,9 @@ static inline bool aux_sym__sym_lit_without_slash_token1_character_set_1(int32_t
           ? c == 0
           : c <= '\r')
         : (c <= ' ' || c == '"'))
-      : (c <= ')' || (c < '@'
-        ? (c < ';'
-          ? c == ','
-          : c <= ';')
-        : (c <= '@' || (c >= '[' && c <= '^')))))
+      : (c <= ')' || (c < ';'
+        ? c == ','
+        : (c <= ';' || (c >= '[' && c <= '^')))))
     : (c <= '`' || (c < 8200
       ? (c < 5760
         ? (c < '}'
@@ -2863,7 +2835,7 @@ static inline bool aux_sym__sym_lit_without_slash_token1_character_set_1(int32_t
 }
 
 static inline bool aux_sym__sym_lit_without_slash_token1_character_set_2(int32_t c) {
-  return (c < '['
+  return (c < '`'
     ? (c < '\''
       ? (c < 28
         ? (c < '\t'
@@ -2874,17 +2846,15 @@ static inline bool aux_sym__sym_lit_without_slash_token1_character_set_2(int32_t
         ? (c < '/'
           ? c == ','
           : c <= '/')
-        : (c <= ';' || c == '@'))))
-    : (c <= '^' || (c < 8192
-      ? (c < '}'
-        ? (c < '{'
-          ? c == '`'
-          : c <= '{')
-        : (c <= '}' || c == 5760))
-      : (c <= 8198 || (c < 8287
-        ? (c < 8232
-          ? (c >= 8200 && c <= 8202)
-          : c <= 8233)
+        : (c <= ';' || (c >= '[' && c <= '^')))))
+    : (c <= '`' || (c < 8200
+      ? (c < 5760
+        ? (c < '}'
+          ? c == '{'
+          : c <= '}')
+        : (c <= 5760 || (c >= 8192 && c <= 8198)))
+      : (c <= 8202 || (c < 8287
+        ? (c >= 8232 && c <= 8233)
         : (c <= 8287 || c == 12288))))));
 }
 
@@ -2914,7 +2884,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead == '@') ADVANCE(346);
       if (lookahead == 'V') ADVANCE(346);
       if (lookahead == '[') ADVANCE(346);
-      if (lookahead == '\\') ADVANCE(556);
+      if (lookahead == '\\') ADVANCE(555);
       if (lookahead == ']') ADVANCE(346);
       if (lookahead == '^') ADVANCE(346);
       if (lookahead == '_') ADVANCE(346);
@@ -2962,19 +2932,19 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead == '#') ADVANCE(300);
       if (lookahead == '%') ADVANCE(562);
       if (lookahead == '&') ADVANCE(563);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '*') ADVANCE(579);
-      if (lookahead == ',') ADVANCE(551);
+      if (lookahead == ',') ADVANCE(550);
       if (lookahead == '/') ADVANCE(580);
       if (lookahead == ':') ADVANCE(338);
       if (lookahead == ';') ADVANCE(578);
       if (lookahead == '?') ADVANCE(581);
-      if (lookahead == '@') ADVANCE(547);
+      if (lookahead == '@') ADVANCE(559);
       if (lookahead == 'N') ADVANCE(106);
-      if (lookahead == 'V') ADVANCE(559);
+      if (lookahead == 'V') ADVANCE(558);
       if (lookahead == '^') ADVANCE(566);
       if (lookahead == '_') ADVANCE(573);
-      if (lookahead == 'v') ADVANCE(558);
+      if (lookahead == 'v') ADVANCE(557);
       if (lookahead == '|') ADVANCE(564);
       if (lookahead == '~') ADVANCE(348);
       if (('+' <= lookahead && lookahead <= '-')) ADVANCE(27);
@@ -3052,15 +3022,15 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
     case 9:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'a') ADVANCE(435);
       if (lookahead == 'c') ADVANCE(432);
       if (lookahead == 'd') ADVANCE(469);
@@ -3087,22 +3057,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 8287 ||
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           (lookahead < '{' || '}' < lookahead)) ADVANCE(533);
       END_STATE();
     case 10:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'a') ADVANCE(435);
       if (lookahead == 'c') ADVANCE(432);
       if (lookahead == 'd') ADVANCE(327);
@@ -3134,22 +3103,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 8287 ||
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           (lookahead < '{' || '}' < lookahead)) ADVANCE(533);
       END_STATE();
     case 11:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'c') ADVANCE(433);
       if (lookahead == 'd') ADVANCE(323);
       if (lookahead == 'l') ADVANCE(322);
@@ -3173,22 +3141,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 8287 ||
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           (lookahead < '{' || '}' < lookahead)) ADVANCE(533);
       END_STATE();
     case 12:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'c') ADVANCE(433);
       if (lookahead == 'd') ADVANCE(395);
       if (lookahead == 'l') ADVANCE(377);
@@ -3206,22 +3173,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 8287 ||
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           (lookahead < '{' || '}' < lookahead)) ADVANCE(533);
       END_STATE();
     case 13:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '=') ADVANCE(617);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'a') ADVANCE(380);
       if (lookahead == 'b') ADVANCE(393);
       if (lookahead == 'c') ADVANCE(433);
@@ -3252,22 +3218,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
           lookahead != ')' &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           (lookahead < '{' || '}' < lookahead)) ADVANCE(533);
       END_STATE();
     case 14:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '=') ADVANCE(617);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'a') ADVANCE(380);
       if (lookahead == 'b') ADVANCE(393);
       if (lookahead == 'c') ADVANCE(433);
@@ -3292,22 +3257,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
           lookahead != ')' &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           (lookahead < '{' || '}' < lookahead)) ADVANCE(533);
       END_STATE();
     case 15:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '=') ADVANCE(617);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'c') ADVANCE(433);
       if (lookahead == 'n') ADVANCE(421);
       if (lookahead == '|') ADVANCE(521);
@@ -3332,22 +3296,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
           lookahead != ')' &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           (lookahead < '{' || '}' < lookahead)) ADVANCE(533);
       END_STATE();
     case 16:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '=') ADVANCE(617);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'c') ADVANCE(433);
       if (lookahead == 'n') ADVANCE(421);
       if (lookahead == '|') ADVANCE(521);
@@ -3364,21 +3327,20 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
           lookahead != ')' &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           (lookahead < '{' || '}' < lookahead)) ADVANCE(533);
       END_STATE();
     case 17:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(298);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == '\\') ADVANCE(287);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'c') ADVANCE(433);
       if (lookahead == 'n') ADVANCE(421);
       if (lookahead == '{') ADVANCE(538);
@@ -3390,7 +3352,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
     case 18:
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(297);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ',') ADVANCE(40);
       if (lookahead == ':') ADVANCE(337);
@@ -3408,7 +3370,6 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
           lookahead != ')' &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           lookahead != '`' &&
           lookahead != '}') ADVANCE(533);
@@ -3417,7 +3378,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(5);
       if (lookahead == '(') ADVANCE(536);
-      if (lookahead == ',') ADVANCE(551);
+      if (lookahead == ',') ADVANCE(550);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '^') ADVANCE(534);
@@ -3441,7 +3402,6 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
           (lookahead < '\'' || ')' < lookahead) &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           lookahead != '`' &&
           lookahead != '}') ADVANCE(533);
@@ -3450,7 +3410,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(5);
       if (lookahead == '(') ADVANCE(536);
-      if (lookahead == ',') ADVANCE(551);
+      if (lookahead == ',') ADVANCE(550);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '^') ADVANCE(534);
@@ -3466,7 +3426,6 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
           (lookahead < '\'' || ')' < lookahead) &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           lookahead != '`' &&
           lookahead != '}') ADVANCE(533);
@@ -3486,7 +3445,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead == '#') ADVANCE(6);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
-      if (lookahead == ',') ADVANCE(551);
+      if (lookahead == ',') ADVANCE(550);
       if (lookahead == '/') ADVANCE(580);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
@@ -3531,14 +3490,14 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead != 0) ADVANCE(24);
       END_STATE();
     case 25:
-      if (lookahead == '#') ADVANCE(553);
+      if (lookahead == '#') ADVANCE(552);
       if (lookahead != 0) ADVANCE(269);
       END_STATE();
     case 26:
       if (lookahead == '#') ADVANCE(7);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
-      if (lookahead == ',') ADVANCE(551);
+      if (lookahead == ',') ADVANCE(550);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '=') ADVANCE(616);
@@ -3579,7 +3538,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       END_STATE();
     case 28:
       if (lookahead == '#') ADVANCE(297);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
       if (lookahead == ',') ADVANCE(40);
@@ -3606,7 +3565,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       END_STATE();
     case 29:
       if (lookahead == '#') ADVANCE(297);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ',') ADVANCE(40);
       if (lookahead == ':') ADVANCE(337);
@@ -3641,7 +3600,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       END_STATE();
     case 30:
       if (lookahead == '#') ADVANCE(299);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ',') ADVANCE(40);
       if (lookahead == '=') ADVANCE(617);
@@ -3660,7 +3619,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
     case 31:
       if (lookahead == '#') ADVANCE(8);
       if (lookahead == '(') ADVANCE(536);
-      if (lookahead == ',') ADVANCE(551);
+      if (lookahead == ',') ADVANCE(550);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '=') ADVANCE(616);
       if (lookahead == '^') ADVANCE(534);
@@ -3714,9 +3673,9 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead == 'l') ADVANCE(212);
       END_STATE();
     case 37:
-      if (lookahead == '#') ADVANCE(557);
+      if (lookahead == '#') ADVANCE(556);
       if (lookahead != 0 &&
-          lookahead != '\n') ADVANCE(555);
+          lookahead != '\n') ADVANCE(554);
       END_STATE();
     case 38:
       if (lookahead == '-') ADVANCE(144);
@@ -3725,7 +3684,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead == '-') ADVANCE(235);
       END_STATE();
     case 40:
-      if (lookahead == '@') ADVANCE(550);
+      if (lookahead == '@') ADVANCE(549);
       END_STATE();
     case 41:
       if (lookahead == 'A') ADVANCE(540);
@@ -4459,7 +4418,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead != 0) ADVANCE(269);
       END_STATE();
     case 270:
-      if (lookahead == '|') ADVANCE(554);
+      if (lookahead == '|') ADVANCE(553);
       if (lookahead != 0) ADVANCE(270);
       END_STATE();
     case 271:
@@ -4570,15 +4529,15 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (eof) ADVANCE(291);
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'c') ADVANCE(433);
       if (lookahead == 'n') ADVANCE(421);
       if (lookahead == '{') ADVANCE(538);
@@ -4596,22 +4555,21 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 8287 ||
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead)) ADVANCE(533);
       END_STATE();
     case 290:
       if (eof) ADVANCE(291);
       if (lookahead == '"') ADVANCE(340);
       if (lookahead == '#') ADVANCE(296);
-      if (lookahead == '\'') ADVANCE(548);
+      if (lookahead == '\'') ADVANCE(547);
       if (lookahead == '(') ADVANCE(536);
       if (lookahead == ')') ADVANCE(537);
-      if (lookahead == ',') ADVANCE(552);
+      if (lookahead == ',') ADVANCE(551);
       if (lookahead == '.') ADVANCE(303);
       if (lookahead == ':') ADVANCE(337);
       if (lookahead == ';') ADVANCE(294);
       if (lookahead == '^') ADVANCE(534);
-      if (lookahead == '`') ADVANCE(549);
+      if (lookahead == '`') ADVANCE(548);
       if (lookahead == 'c') ADVANCE(433);
       if (lookahead == 'n') ADVANCE(421);
       if (lookahead == '|') ADVANCE(521);
@@ -4636,7 +4594,6 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 8287 ||
           lookahead == 12288) ADVANCE(292);
       if (lookahead != 0 &&
-          lookahead != '@' &&
           (lookahead < '[' || ']' < lookahead) &&
           lookahead != '{') ADVANCE(533);
       END_STATE();
@@ -6027,35 +5984,31 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       ACCEPT_TOKEN(anon_sym_POUND_SQUOTE);
       END_STATE();
     case 547:
-      ACCEPT_TOKEN(anon_sym_AT);
-      if (lookahead == ':') ADVANCE(560);
+      ACCEPT_TOKEN(anon_sym_SQUOTE);
       END_STATE();
     case 548:
-      ACCEPT_TOKEN(anon_sym_SQUOTE);
+      ACCEPT_TOKEN(anon_sym_BQUOTE);
       END_STATE();
     case 549:
-      ACCEPT_TOKEN(anon_sym_BQUOTE);
+      ACCEPT_TOKEN(anon_sym_COMMA_AT);
       END_STATE();
     case 550:
-      ACCEPT_TOKEN(anon_sym_COMMA_AT);
+      ACCEPT_TOKEN(anon_sym_COMMA);
       END_STATE();
     case 551:
       ACCEPT_TOKEN(anon_sym_COMMA);
+      if (lookahead == '@') ADVANCE(549);
       END_STATE();
     case 552:
-      ACCEPT_TOKEN(anon_sym_COMMA);
-      if (lookahead == '@') ADVANCE(550);
-      END_STATE();
-    case 553:
       ACCEPT_TOKEN(sym_block_comment);
       END_STATE();
-    case 554:
+    case 553:
       ACCEPT_TOKEN(sym_fancy_literal);
       END_STATE();
-    case 555:
+    case 554:
       ACCEPT_TOKEN(aux_sym__format_token_token1);
       END_STATE();
-    case 556:
+    case 555:
       ACCEPT_TOKEN(aux_sym__format_token_token1);
       if (lookahead == '"') ADVANCE(347);
       if (lookahead == 'L' ||
@@ -6063,16 +6016,20 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
       if (lookahead == 'N' ||
           lookahead == 'n') ADVANCE(71);
       END_STATE();
-    case 557:
+    case 556:
       ACCEPT_TOKEN(aux_sym__format_token_token1);
       if (lookahead == '|') ADVANCE(269);
       END_STATE();
-    case 558:
+    case 557:
       ACCEPT_TOKEN(anon_sym_v);
       END_STATE();
-    case 559:
+    case 558:
       ACCEPT_TOKEN(anon_sym_V);
       END_STATE();
+    case 559:
+      ACCEPT_TOKEN(anon_sym_AT);
+      if (lookahead == ':') ADVANCE(560);
+      END_STATE();
     case 560:
       ACCEPT_TOKEN(anon_sym_AT_COLON);
       END_STATE();
@@ -6482,7 +6439,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
   }
 }
 
-static TSLexMode ts_lex_modes[STATE_COUNT] = {
+static const TSLexMode ts_lex_modes[STATE_COUNT] = {
   [0] = {.lex_state = 0},
   [1] = {.lex_state = 289},
   [2] = {.lex_state = 9},
@@ -9994,7 +9951,7 @@ static TSLexMode ts_lex_modes[STATE_COUNT] = {
   [3508] = {.lex_state = 23},
 };
 
-static uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
+static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
   [0] = {
     [ts_builtin_sym_end] = ACTIONS(1),
     [anon_sym_POUND_] = ACTIONS(1),
@@ -10019,7 +9976,6 @@ static uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
     [anon_sym_RBRACK] = ACTIONS(1),
     [anon_sym_POUND_QMARK] = ACTIONS(1),
     [anon_sym_POUND_QMARK_AT] = ACTIONS(1),
-    [anon_sym_AT] = ACTIONS(1),
     [anon_sym_SQUOTE] = ACTIONS(1),
     [anon_sym_BQUOTE] = ACTIONS(1),
     [anon_sym_COMMA] = ACTIONS(1),
@@ -10027,6 +9983,7 @@ static uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
     [aux_sym__format_token_token1] = ACTIONS(1),
     [anon_sym_v] = ACTIONS(1),
     [anon_sym_V] = ACTIONS(1),
+    [anon_sym_AT] = ACTIONS(1),
     [anon_sym_PERCENT] = ACTIONS(1),
     [anon_sym_AMP] = ACTIONS(1),
     [anon_sym_PIPE] = ACTIONS(1),
@@ -21510,7 +21467,7 @@ static uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
   },
 };
 
-static uint16_t ts_small_parse_table[] = {
+static const uint16_t ts_small_parse_table[] = {
   [0] = 35,
     ACTIONS(9), 1,
       anon_sym_POUND_,
@@ -167006,7 +166963,7 @@ static uint16_t ts_small_parse_table[] = {
       anon_sym_EQ,
 };
 
-static uint32_t ts_small_parse_table_map[] = {
+static const uint32_t ts_small_parse_table_map[] = {
   [SMALL_STATE(166)] = 0,
   [SMALL_STATE(167)] = 135,
   [SMALL_STATE(168)] = 270,
@@ -170352,7 +170309,7 @@ static uint32_t ts_small_parse_table_map[] = {
   [SMALL_STATE(3508)] = 181864,
 };
 
-static TSParseActionEntry ts_parse_actions[] = {
+static const TSParseActionEntry ts_parse_actions[] = {
   [0] = {.entry = {.count = 0, .reusable = false}},
   [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(),
   [3] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(),
@@ -174392,7 +174349,7 @@ extern "C" {
 #endif
 
 extern const TSLanguage *tree_sitter_commonlisp(void) {
-  static TSLanguage language = {
+  static const TSLanguage language = {
     .version = LANGUAGE_VERSION,
     .symbol_count = SYMBOL_COUNT,
     .alias_count = ALIAS_COUNT,
@@ -174403,18 +174360,18 @@ extern const TSLanguage *tree_sitter_commonlisp(void) {
     .production_id_count = PRODUCTION_ID_COUNT,
     .field_count = FIELD_COUNT,
     .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,
-    .parse_table = (const uint16_t *)ts_parse_table,
-    .small_parse_table = (const uint16_t *)ts_small_parse_table,
-    .small_parse_table_map = (const uint32_t *)ts_small_parse_table_map,
+    .parse_table = &ts_parse_table[0][0],
+    .small_parse_table = ts_small_parse_table,
+    .small_parse_table_map = ts_small_parse_table_map,
     .parse_actions = ts_parse_actions,
     .symbol_names = ts_symbol_names,
     .field_names = ts_field_names,
-    .field_map_slices = (const TSFieldMapSlice *)ts_field_map_slices,
-    .field_map_entries = (const TSFieldMapEntry *)ts_field_map_entries,
+    .field_map_slices = ts_field_map_slices,
+    .field_map_entries = ts_field_map_entries,
     .symbol_metadata = ts_symbol_metadata,
     .public_symbol_map = ts_symbol_map,
     .alias_map = ts_non_terminal_alias_map,
-    .alias_sequences = (const TSSymbol *)ts_alias_sequences,
+    .alias_sequences = &ts_alias_sequences[0][0],
     .lex_modes = ts_lex_modes,
     .lex_fn = ts_lex,
   };
diff --git a/src/tree_sitter/parser.h b/src/tree_sitter/parser.h
index a3a87bd..cbbc7b4 100644
--- a/src/tree_sitter/parser.h
+++ b/src/tree_sitter/parser.h
@@ -102,8 +102,8 @@ struct TSLanguage {
   const uint16_t *small_parse_table;
   const uint32_t *small_parse_table_map;
   const TSParseActionEntry *parse_actions;
-  const char **symbol_names;
-  const char **field_names;
+  const char * const *symbol_names;
+  const char * const *field_names;
   const TSFieldMapSlice *field_map_slices;
   const TSFieldMapEntry *field_map_entries;
   const TSSymbolMetadata *symbol_metadata;


Test patch:
diff --git a/test/corpus/basic.txt b/test/corpus/basic.txt
index 7769630..0c955e0 100644
--- a/test/corpus/basic.txt
+++ b/test/corpus/basic.txt
@@ -1075,3 +1075,37 @@ Self-references
           (kwd_lit
             (kwd_symbol))
           (sym_lit))))))
+
+================================================================================
+@ in defun identifiers
+================================================================================
+;; this highlights properly
+(defun foo (bar)                                                                                                                                                                                         
+  (baz))                                                                                                                                                                                                     
+
+;; this doesn't and breaks all highlighting below                                                                                                                                                                                                        
+(defun @foo (bar)                                                                                                                                                                                        
+  (baz))
+--------------------------------------------------------------------------------
+
+(source
+  (comment)
+  (list_lit
+    (defun
+      (defun_header
+        (defun_keyword)
+        (sym_lit)
+        (list_lit
+          (sym_lit)))
+      (list_lit
+        (sym_lit))))
+  (comment)
+  (list_lit
+    (defun
+      (defun_header
+        (defun_keyword)
+        (sym_lit)
+        (list_lit
+          (sym_lit)))
+      (list_lit
+        (sym_lit)))))