refactor(tests): migrate remaining grammar.json tests to grammar.js

This commit is contained in:
Amaan Qureshi 2024-04-28 23:50:41 -04:00
parent 26fa3a76a5
commit 627617edb4
36 changed files with 560 additions and 1212 deletions

286
Cargo.lock generated
View file

@ -16,9 +16,9 @@ dependencies = [
[[package]]
name = "aho-corasick"
version = "1.1.2"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
@ -100,9 +100,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16"
[[package]]
name = "autocfg"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
[[package]]
name = "bincode"
@ -119,7 +119,7 @@ version = "0.69.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0"
dependencies = [
"bitflags 2.4.2",
"bitflags 2.5.0",
"cexpr",
"clang-sys",
"itertools",
@ -144,21 +144,21 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.4.2"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
[[package]]
name = "bumpalo"
version = "3.15.4"
version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa"
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "bytes"
version = "1.5.0"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
[[package]]
name = "cc"
@ -263,9 +263,9 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "combine"
version = "4.6.6"
version = "4.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
dependencies = [
"bytes",
"memchr",
@ -289,18 +289,18 @@ checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
[[package]]
name = "cranelift-bforest"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b3775cc6cc00c90d29eebea55feedb2b0168e23f5415bab7859c4004d7323d1"
checksum = "3b57d4f3ffc28bbd6ef1ca7b50b20126717232f97487efe027d135d9d87eb29c"
dependencies = [
"cranelift-entity",
]
[[package]]
name = "cranelift-codegen"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "637f3184ba5bfa48d425bad1d2e4faf5fcf619f5e0ca107edc6dc02f589d4d74"
checksum = "d1f7d0ac7fd53f2c29db3ff9a063f6ff5a8be2abaa8f6942aceb6e1521e70df7"
dependencies = [
"bumpalo",
"cranelift-bforest",
@ -310,7 +310,7 @@ dependencies = [
"cranelift-entity",
"cranelift-isle",
"gimli",
"hashbrown 0.14.3",
"hashbrown 0.14.5",
"log",
"regalloc2",
"smallvec",
@ -319,33 +319,33 @@ dependencies = [
[[package]]
name = "cranelift-codegen-meta"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4b35b8240462341d94d31aab807cad704683988708261aecae3d57db48b7212"
checksum = "b40bf21460a600178956cb7fd900a7408c6587fbb988a8063f7215361801a1da"
dependencies = [
"cranelift-codegen-shared",
]
[[package]]
name = "cranelift-codegen-shared"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f3cd1555aa9df1d6d8375732de41b4cb0d787006948d55b6d004d521e9efeb0"
checksum = "d792ecc1243b7ebec4a7f77d9ed428ef27456eeb1f8c780587a6f5c38841be19"
[[package]]
name = "cranelift-control"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14b31a562a10e98ab148fa146801e20665c5f9eda4fce9b2c5a3836575887d74"
checksum = "cea2808043df964b73ad7582e09afbbe06a31f3fb9db834d53e74b4e16facaeb"
dependencies = [
"arbitrary",
]
[[package]]
name = "cranelift-entity"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af1e0467700a3f4fccf5feddbaebdf8b0eb82535b06a9600c4bc5df40872e75d"
checksum = "f1930946836da6f514da87625cd1a0331f3908e0de454628c24a0b97b130c4d4"
dependencies = [
"serde",
"serde_derive",
@ -353,9 +353,9 @@ dependencies = [
[[package]]
name = "cranelift-frontend"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6cb918ee2c23939262efd1b99d76a21212ac7bd35129582133e21a22a6ff0467"
checksum = "5482a5fcdf98f2f31b21093643bdcfe9030866b8be6481117022e7f52baa0f2b"
dependencies = [
"cranelift-codegen",
"log",
@ -365,15 +365,15 @@ dependencies = [
[[package]]
name = "cranelift-isle"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "966e4cfb23cf6d7f1d285d53a912baaffc5f06bcd9c9b0a2d8c66a184fae534b"
checksum = "6f6e1869b6053383bdb356900e42e33555b4c9ebee05699469b7c53cdafc82ea"
[[package]]
name = "cranelift-native"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bea803aadfc4aabdfae7c3870f1b1f6dd4332f4091859e9758ef5fca6bf8cc87"
checksum = "a91446e8045f1c4bc164b7bba68e2419c623904580d4b730877a663c6da38964"
dependencies = [
"cranelift-codegen",
"libc",
@ -382,9 +382,9 @@ dependencies = [
[[package]]
name = "cranelift-wasm"
version = "0.106.1"
version = "0.106.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11d18a3572cd897555bba3621e568029417d8f5cc26aeede2d7cb0bad6afd916"
checksum = "f8b17979b862d3b0d52de6ae3294ffe4d86c36027b56ad0443a7c8c8f921d14f"
dependencies = [
"cranelift-codegen",
"cranelift-entity",
@ -460,9 +460,9 @@ dependencies = [
[[package]]
name = "either"
version = "1.10.0"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a"
checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2"
[[package]]
name = "equivalent"
@ -488,9 +488,9 @@ checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
[[package]]
name = "fastrand"
version = "2.0.1"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
[[package]]
name = "filetime"
@ -525,9 +525,9 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.2.12"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c"
dependencies = [
"cfg-if",
"libc",
@ -551,7 +551,7 @@ version = "0.18.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70"
dependencies = [
"bitflags 2.4.2",
"bitflags 2.5.0",
"libc",
"libgit2-sys",
"log",
@ -577,9 +577,9 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.14.3"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
dependencies = [
"ahash",
]
@ -631,7 +631,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
dependencies = [
"equivalent",
"hashbrown 0.14.3",
"hashbrown 0.14.5",
"serde",
]
@ -652,9 +652,9 @@ dependencies = [
[[package]]
name = "itoa"
version = "1.0.10"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
[[package]]
name = "jni"
@ -741,18 +741,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19"
dependencies = [
"cfg-if",
"windows-targets 0.52.4",
"windows-targets 0.52.5",
]
[[package]]
name = "libredox"
version = "0.0.1"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [
"bitflags 2.4.2",
"bitflags 2.5.0",
"libc",
"redox_syscall",
]
[[package]]
@ -771,9 +770,9 @@ dependencies = [
[[package]]
name = "libz-sys"
version = "1.1.15"
version = "1.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6"
checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9"
dependencies = [
"cc",
"libc",
@ -828,9 +827,9 @@ dependencies = [
[[package]]
name = "memoffset"
version = "0.9.0"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
dependencies = [
"autocfg",
]
@ -853,7 +852,7 @@ version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4"
dependencies = [
"bitflags 2.4.2",
"bitflags 2.5.0",
"cfg-if",
"cfg_aliases",
"libc",
@ -885,7 +884,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
dependencies = [
"crc32fast",
"hashbrown 0.14.3",
"hashbrown 0.14.5",
"indexmap",
"memchr",
]
@ -904,9 +903,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-sys"
version = "0.9.101"
version = "0.9.102"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff"
checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2"
dependencies = [
"cc",
"libc",
@ -934,9 +933,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pin-project-lite"
version = "0.2.13"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
[[package]]
name = "pkg-config"
@ -962,9 +961,9 @@ dependencies = [
[[package]]
name = "prettyplease"
version = "0.2.16"
version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5"
checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550"
dependencies = [
"proc-macro2",
"syn",
@ -972,9 +971,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.79"
version = "1.0.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
dependencies = [
"unicode-ident",
]
@ -990,9 +989,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.35"
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [
"proc-macro2",
]
@ -1044,9 +1043,9 @@ dependencies = [
[[package]]
name = "redox_users"
version = "0.4.4"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891"
dependencies = [
"getrandom",
"libredox",
@ -1103,11 +1102,11 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustix"
version = "0.38.31"
version = "0.38.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
dependencies = [
"bitflags 2.4.2",
"bitflags 2.5.0",
"errno",
"libc",
"linux-raw-sys",
@ -1137,18 +1136,18 @@ checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
[[package]]
name = "serde"
version = "1.0.198"
version = "1.0.199"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc"
checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.198"
version = "1.0.199"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9"
checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc"
dependencies = [
"proc-macro2",
"quote",
@ -1196,9 +1195,9 @@ checksum = "fcc3fc564a4b53fd1e8589628efafe57602d91bde78be18186b5f61e8faea470"
[[package]]
name = "smallvec"
version = "1.13.1"
version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "sptr"
@ -1214,15 +1213,15 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "strsim"
version = "0.11.0"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
version = "2.0.53"
version = "2.0.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032"
checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
dependencies = [
"proc-macro2",
"quote",
@ -1317,9 +1316,9 @@ dependencies = [
[[package]]
name = "toml_edit"
version = "0.22.8"
version = "0.22.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c12219811e0c1ba077867254e5ad62ee2c9c190b0d957110750ac0cda1ae96cd"
checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef"
dependencies = [
"indexmap",
"serde",
@ -1621,16 +1620,16 @@ version = "0.201.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84e5df6dba6c0d7fafc63a450f1738451ed7a0b52295d83e868218fa286bf708"
dependencies = [
"bitflags 2.4.2",
"bitflags 2.5.0",
"indexmap",
"semver",
]
[[package]]
name = "wasmtime"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "516be5b58a8f75d39b01378516dcb0ff7b9bc39c7f1f10eec5b338d4916cf988"
checksum = "4e300c0e3f19dc9064e3b17ce661088646c70dbdde36aab46470ed68ba58db7d"
dependencies = [
"anyhow",
"bincode",
@ -1659,18 +1658,18 @@ dependencies = [
[[package]]
name = "wasmtime-asm-macros"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8d22d88a92d69385f18143c946884bf6aaa9ec206ce54c85a2d320c1362b009"
checksum = "110aa598e02a136fb095ca70fa96367fc16bab55256a131e66f9b58f16c73daf"
dependencies = [
"cfg-if",
]
[[package]]
name = "wasmtime-c-api-impl"
version = "19.0.0"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67dea28073e105735210b9e932b5e654198d5e28ed31f1314037cd7664ceda2b"
checksum = "be684dae96dc2d371317848f352135333fcefc3483b67ade73031f9cdbbae52e"
dependencies = [
"anyhow",
"log",
@ -1682,9 +1681,9 @@ dependencies = [
[[package]]
name = "wasmtime-c-api-macros"
version = "19.0.0"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0cfe12050fa28b17ab8434ab757fee281dd0d5c7715fa1bc5e4c0b29d1705415"
checksum = "ab36d96e82e247a44b0500d8e1ccc103da5d24da017f5466d0d8cb6a1b2383f8"
dependencies = [
"proc-macro2",
"quote",
@ -1692,9 +1691,9 @@ dependencies = [
[[package]]
name = "wasmtime-cranelift"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "961ab5ee4b17e627001b18069ee89ef906edbbd3f84955515f6aad5ab6d82299"
checksum = "e923262451a4b5b39fe02f69f1338d56356db470e289ea1887346b9c7f592738"
dependencies = [
"anyhow",
"cfg-if",
@ -1717,9 +1716,9 @@ dependencies = [
[[package]]
name = "wasmtime-cranelift-shared"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc4db94596be14cd1f85844ce85470bf68acf235143098b9d9bf72b49e47b917"
checksum = "508898cbbea0df81a5d29cfc1c7c72431a1bc4c9e89fd9514b4c868474c05c7a"
dependencies = [
"anyhow",
"cranelift-codegen",
@ -1733,9 +1732,9 @@ dependencies = [
[[package]]
name = "wasmtime-environ"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "420b13858ef27dfd116f1fdb0513e9593a307a632ade2ea58334b639a3d8d24e"
checksum = "d7e3f2aa72dbb64c19708646e1ff97650f34e254598b82bad5578ea9c80edd30"
dependencies = [
"anyhow",
"bincode",
@ -1754,9 +1753,9 @@ dependencies = [
[[package]]
name = "wasmtime-jit-icache-coherence"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59c48eb4223d6556ffbf3decb146d0da124f1fd043f41c98b705252cb6a5c186"
checksum = "c22ca2ef4d87b23d400660373453e274b2251bc2d674e3102497f690135e04b0"
dependencies = [
"cfg-if",
"libc",
@ -1765,9 +1764,9 @@ dependencies = [
[[package]]
name = "wasmtime-runtime"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fefac2cb5f5a6f365234a3584bf40bd2e45e7f6cd90a689d9b2afbb9881978f"
checksum = "1806ee242ca4fd183309b7406e4e83ae7739b7569f395d56700de7c7ef9f5eb8"
dependencies = [
"anyhow",
"cc",
@ -1792,15 +1791,15 @@ dependencies = [
[[package]]
name = "wasmtime-slab"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52d7b97b92df126fdbe994a53d2215828ec5ed5087535e6d4703b1fbd299f0e3"
checksum = "20c58bef9ce877fd06acb58f08d003af17cb05cc51225b455e999fbad8e584c0"
[[package]]
name = "wasmtime-types"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "509c88abb830819b259c49e2d4e4f22b555db066ba08ded0b76b071a2aa53ddf"
checksum = "cebe297aa063136d9d2e5b347c1528868aa43c2c8d0e1eb0eec144567e38fe0f"
dependencies = [
"cranelift-entity",
"serde",
@ -1811,9 +1810,9 @@ dependencies = [
[[package]]
name = "wasmtime-versioned-export-macros"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1d81c092a61ca1667013e2eb08fed7c6c53e496dbbaa32d5685dc5152b0a772"
checksum = "ffaafa5c12355b1a9ee068e9295d50c4ca0a400c721950cdae4f5b54391a2da5"
dependencies = [
"proc-macro2",
"quote",
@ -1822,9 +1821,9 @@ dependencies = [
[[package]]
name = "wasmtime-wmemcheck"
version = "19.0.1"
version = "19.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b77212b6874bbc86d220bb1d28632d0c11c6afe996c3e1ddcf746b1a6b4919b9"
checksum = "c9a8c62e9df8322b2166d2a6f096fbec195ddb093748fd74170dcf25ef596769"
[[package]]
name = "web-sys"
@ -1883,11 +1882,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.6"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
dependencies = [
"winapi",
"windows-sys 0.52.0",
]
[[package]]
@ -1920,7 +1919,7 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets 0.52.4",
"windows-targets 0.52.5",
]
[[package]]
@ -1955,17 +1954,18 @@ dependencies = [
[[package]]
name = "windows-targets"
version = "0.52.4"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
dependencies = [
"windows_aarch64_gnullvm 0.52.4",
"windows_aarch64_msvc 0.52.4",
"windows_i686_gnu 0.52.4",
"windows_i686_msvc 0.52.4",
"windows_x86_64_gnu 0.52.4",
"windows_x86_64_gnullvm 0.52.4",
"windows_x86_64_msvc 0.52.4",
"windows_aarch64_gnullvm 0.52.5",
"windows_aarch64_msvc 0.52.5",
"windows_i686_gnu 0.52.5",
"windows_i686_gnullvm",
"windows_i686_msvc 0.52.5",
"windows_x86_64_gnu 0.52.5",
"windows_x86_64_gnullvm 0.52.5",
"windows_x86_64_msvc 0.52.5",
]
[[package]]
@ -1982,9 +1982,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.4"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
[[package]]
name = "windows_aarch64_msvc"
@ -2000,9 +2000,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.4"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
[[package]]
name = "windows_i686_gnu"
@ -2018,9 +2018,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
version = "0.52.4"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
[[package]]
name = "windows_i686_msvc"
@ -2036,9 +2042,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
version = "0.52.4"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
[[package]]
name = "windows_x86_64_gnu"
@ -2054,9 +2060,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.4"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
[[package]]
name = "windows_x86_64_gnullvm"
@ -2072,9 +2078,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.4"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
[[package]]
name = "windows_x86_64_msvc"
@ -2090,15 +2096,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.4"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
[[package]]
name = "winnow"
version = "0.6.5"
version = "0.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8"
checksum = "14b9415ee827af173ebb3f15f9083df5a122eb93572ec28741fb153356ea2578"
dependencies = [
"memchr",
]

View file

@ -418,7 +418,20 @@ function grammar(baseGrammar, options) {
throw new Error("Grammar must have at least one rule.");
}
return { grammar: { name, inherits, word, rules, extras, conflicts, precedences, externals, inline, supertypes } };
return {
grammar: {
name,
...(inherits ? ( inherits ) : {}),
word,
rules,
extras,
conflicts,
precedences,
externals,
inline,
supertypes,
},
};
}
function checkArguments(args, ruleCount, caller, callerName, suffix = '', argType = 'rule') {

View file

@ -1,5 +1,3 @@
use std::fs;
use tree_sitter::{Node, Parser, Point, Tree};
use super::helpers::{
@ -7,7 +5,10 @@ use super::helpers::{
fixtures::{fixtures_dir, get_language, get_test_language},
random::Rand,
};
use crate::{generate::generate_parser_for_grammar, parse::perform_edit};
use crate::{
generate::{generate_parser_for_grammar, load_grammar_file},
parse::perform_edit,
};
const JSON_EXAMPLE: &str = r#"
@ -853,17 +854,17 @@ fn test_node_field_calls_in_language_without_fields() {
#[test]
fn test_node_is_named_but_aliased_as_anonymous() {
let (parser_name, parser_code) = generate_parser_for_grammar(
&fs::read_to_string(
fixtures_dir()
.join("test_grammars")
.join("named_rule_aliased_as_anonymous")
.join("grammar.json"),
)
.unwrap(),
let grammar_json = load_grammar_file(
&fixtures_dir()
.join("test_grammars")
.join("named_rule_aliased_as_anonymous")
.join("grammar.js"),
None,
)
.unwrap();
let (parser_name, parser_code) = generate_parser_for_grammar(&grammar_json).unwrap();
let mut parser = Parser::new();
let language = get_test_language(&parser_name, &parser_code, None);
parser.set_language(&language).unwrap();

View file

@ -1,5 +1,4 @@
use std::{
fs,
sync::atomic::{AtomicUsize, Ordering},
thread, time,
};
@ -13,7 +12,7 @@ use super::helpers::{
fixtures::{get_language, get_test_language},
};
use crate::{
generate::generate_parser_for_grammar,
generate::{generate_parser_for_grammar, load_grammar_file},
parse::{perform_edit, Edit},
tests::helpers::fixtures::fixtures_dir,
};
@ -432,8 +431,8 @@ fn test_parsing_after_editing_tree_that_depends_on_column_values() {
let dir = fixtures_dir()
.join("test_grammars")
.join("uses_current_column");
let grammar = fs::read_to_string(dir.join("grammar.json")).unwrap();
let (grammar_name, parser_code) = generate_parser_for_grammar(&grammar).unwrap();
let grammar_json = load_grammar_file(&dir.join("grammar.js"), None).unwrap();
let (grammar_name, parser_code) = generate_parser_for_grammar(&grammar_json).unwrap();
let mut parser = Parser::new();
parser

View file

@ -0,0 +1,31 @@
module.exports = grammar({
name: 'lexical_conflicts_due_to_state_merging',
rules: {
expression: $ => choice(
$.conditional,
$.quotient,
$.regex,
$.number,
$.parenthesized,
),
conditional: $ => prec.left(1, seq(
'if',
$.parenthesized,
$.expression
)),
quotient: $ => prec.left(seq(
$.expression,
'/',
$.expression
)),
regex: $ => /\/[^/\n]+\//,
number: $ => /\d+/,
parenthesized: $ => seq('(', $.expression, ')'),
},
});

View file

@ -1,65 +0,0 @@
{
"name": "lexical_conflicts_due_to_state_merging",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "conditional"},
{"type": "SYMBOL", "name": "regex"},
{"type": "SYMBOL", "name": "quotient"},
{"type": "SYMBOL", "name": "number"},
{"type": "SYMBOL", "name": "parenthesized"}
]
},
"conditional": {
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "if"},
{"type": "SYMBOL", "name": "parenthesized"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
"quotient": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "/"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
"regex": {
"type": "PATTERN",
"value": "/[^/\n]+/"
},
"number": {
"type": "PATTERN",
"value": "\\d+"
},
"parenthesized": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "("},
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": ")"}
]
}
}
}

View file

@ -0,0 +1,48 @@
module.exports = grammar({
name: 'named_precedences',
conflicts: $ => [
[$.expression, $.type],
[$.expression, $.nested_type],
],
precedences: $ => [
[$.member_expression, "and", "or"],
[$.nested_type, "type_intersection", "type_union"],
],
rules: {
program: $ => repeat(choice(
$.expression_statement,
$.declaration_statement,
)),
expression_statement: $ => seq($.expression, ';'),
declaration_statement: $ => seq($.type, $.expression, ';'),
expression: $ => choice(
$.member_expression,
$.binary_expression,
$.identifier,
),
member_expression: $ => seq($.expression, '.', $.identifier),
binary_expression: $ => choice(
prec.left('or', seq($.expression, '||', $.expression)),
prec.left('and', seq($.expression, '&&', $.expression)),
),
type: $ => choice($.nested_type, $.binary_type, $.identifier),
nested_type: $ => seq($.identifier, '.', $.identifier),
binary_type: $ => choice(
prec.left('type_union', seq($.type, '||', $.type)),
prec.left('type_intersection', seq($.type, '&&', $.type)),
),
identifier: $ => /[a-z]\w+/,
},
});

View file

@ -1,159 +0,0 @@
{
"name": "named_precedences",
"extras": [
{
"type": "PATTERN",
"value": "\\s+"
}
],
"precedences": [
[
{"type": "SYMBOL", "name": "member_expression"},
{"type": "STRING", "value": "and"},
{"type": "STRING", "value": "or"}
],
[
{"type": "SYMBOL", "name": "nested_type"},
{"type": "STRING", "value": "type_intersection"},
{"type": "STRING", "value": "type_union"}
]
],
"conflicts": [
["expression", "type"],
["expression", "nested_type"]
],
"rules": {
"program": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "expression_statement"},
{"type": "SYMBOL", "name": "declaration_statement"}
]
}
},
"expression_statement": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": ";"}
]
},
"declaration_statement": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "type"},
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": ";"}
]
},
"expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "member_expression"},
{"type": "SYMBOL", "name": "binary_expression"},
{"type": "SYMBOL", "name": "identifier"}
]
},
"member_expression": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "."},
{"type": "SYMBOL", "name": "identifier"}
]
},
"binary_expression": {
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": "or",
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "||"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
{
"type": "PREC_LEFT",
"value": "and",
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "&&"},
{"type": "SYMBOL", "name": "expression"}
]
}
}
]
},
"type": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "nested_type"},
{"type": "SYMBOL", "name": "binary_type"},
{"type": "SYMBOL", "name": "identifier"}
]
},
"nested_type": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "STRING", "value": "."},
{"type": "SYMBOL", "name": "identifier"}
]
},
"binary_type": {
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": "type_union",
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "type"},
{"type": "STRING", "value": "||"},
{"type": "SYMBOL", "name": "type"}
]
}
},
{
"type": "PREC_LEFT",
"value": "type_intersection",
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "type"},
{"type": "STRING", "value": "&&"},
{"type": "SYMBOL", "name": "type"}
]
}
}
]
},
"identifier": {
"type": "PATTERN",
"value": "[a-z]\\w+"
}
}
}

View file

@ -0,0 +1,15 @@
module.exports = grammar({
name: 'named_rule_aliased_as_anonymous',
rules: {
a: $ => seq(
alias($.b, 'the-alias'),
$.c,
$.b,
),
b: _ => 'B',
c: _ => 'C',
},
});

View file

@ -1,33 +0,0 @@
{
"name": "named_rule_aliased_as_anonymous",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"a": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"value": "the-alias",
"named": false,
"content": {"type": "SYMBOL", "name": "b"}
},
{"type": "SYMBOL", "name": "c"},
{"type": "SYMBOL", "name": "b"}
]
},
"b": {
"type": "STRING",
"value": "B"
},
"c": {
"type": "STRING",
"value": "C"
}
}
}

View file

@ -0,0 +1,22 @@
module.exports = grammar({
name: 'nested_inlined_rules',
inline: $ => [
$.top_level_item,
$.statement,
],
rules: {
program: $ => repeat1($.top_level_item),
top_level_item: $ => choice($.statement, '!'),
statement: $ => choice($.expression_statement, $.return_statement),
return_statement: $ => seq('return', $.number, ';'),
expression_statement: $ => seq($.number, ';'),
number: _ => /\d+/,
},
});

View file

@ -1,54 +0,0 @@
{
"name": "nested_inlined_rules",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"inline": [
"top_level_item",
"statement"
],
"rules": {
"program": {
"type": "REPEAT1",
"content": {"type": "SYMBOL", "name": "top_level_item"}
},
"top_level_item": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "statement"},
{"type": "STRING", "value": "!"}
]
},
"statement": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "expression_statement"},
{"type": "SYMBOL", "name": "return_statement"}
]
},
"return_statement": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "return"},
{"type": "SYMBOL", "name": "number"},
{"type": "STRING", "value": ";"}
]
},
"expression_statement": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "number"},
{"type": "STRING", "value": ";"}
]
},
"number": {"type": "PATTERN", "value": "\\d+"}
}
}

View file

@ -0,0 +1,19 @@
module.exports = grammar({
name: 'partially_resolved_conflict',
rules: {
expression: $ => choice($.binary, $.identifier),
unary_a: $ => prec(2, seq('!', $.expression)),
unary_b: $ => prec(2, seq('!', $.expression)),
binary: $ => seq(
choice($.unary_a, $.unary_b, $.expression),
'<',
$.expression,
),
identifier: _ => /[a-z]+/,
},
});

View file

@ -1,58 +0,0 @@
{
"name": "partially_resolved_conflict",
"rules": {
"expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "binary"},
{"type": "SYMBOL", "name": "identifier"}
]
},
"unary_a": {
"type": "PREC",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "!"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
"unary_b": {
"type": "PREC",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "!"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
"binary": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "unary_a"},
{"type": "SYMBOL", "name": "unary_b"},
{"type": "SYMBOL", "name": "expression"}
]
},
{"type": "STRING", "value": "<"},
{"type": "SYMBOL", "name": "expression"}
]
},
"identifier": {
"type": "PATTERN",
"value": "[a-z]+"
}
}
}

View file

@ -0,0 +1,17 @@
module.exports = grammar({
name: 'precedence_on_single_child_missing',
rules: {
expression: $ => choice($.function_call, $.identifier),
function_call: $ => prec.right(choice(
seq($.identifier, $.expression),
seq($.identifier, $.block),
seq($.identifier, $.expression, $.block),
)),
block: $ => seq('{', $.expression, '}'),
identifier: _ => /[a-zA-Z]+/,
},
});

View file

@ -1,63 +0,0 @@
{
"name": "precedence_on_single_child_missing",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "function_call"},
{"type": "SYMBOL", "name": "identifier"}
]
},
"function_call": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "expression"}
]
},
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "block"}
]
},
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "expression"},
{"type": "SYMBOL", "name": "block"}
]
}
]
}
},
"block": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "{"},
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "}"}
]
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z]+"
}
}
}

View file

@ -0,0 +1,17 @@
module.exports = grammar({
name: 'precedence_on_single_child_negative',
rules: {
expression: $ => choice($.function_call, $.identifier),
function_call: $ => prec.right(-1, choice(
seq($.identifier, $.expression),
seq($.identifier, $.block),
seq($.identifier, $.expression, $.block),
)),
block: $ => seq('{', $.expression, '}'),
identifier: _ => /[a-zA-Z]+/,
},
});

View file

@ -1,63 +0,0 @@
{
"name": "precedence_on_single_child_negative",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "function_call"},
{"type": "SYMBOL", "name": "identifier"}
]
},
"function_call": {
"type": "PREC_RIGHT",
"value": -1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "expression"}
]
},
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "block"}
]
},
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "expression"},
{"type": "SYMBOL", "name": "block"}
]
}
]
}
},
"block": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "{"},
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "}"}
]
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z]+"
}
}
}

View file

@ -0,0 +1,17 @@
module.exports = grammar({
name: 'precedence_on_single_child_positive',
rules: {
expression: $ => choice($.function_call, $.identifier),
function_call: $ => prec.right(1, choice(
seq($.identifier, $.expression),
seq($.identifier, $.block),
seq($.identifier, $.expression, $.block),
)),
block: $ => seq('{', $.expression, '}'),
identifier: _ => /[a-zA-X]+/,
},
});

View file

@ -1,63 +0,0 @@
{
"name": "precedence_on_single_child_positive",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "function_call"},
{"type": "SYMBOL", "name": "identifier"}
]
},
"function_call": {
"type": "PREC_RIGHT",
"value": 1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "expression"}
]
},
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "block"}
]
},
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "expression"},
{"type": "SYMBOL", "name": "block"}
]
}
]
}
},
"block": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "{"},
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "}"}
]
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z]+"
}
}
}

View file

@ -0,0 +1,30 @@
module.exports = grammar({
name: 'precedence_on_subsequence',
rules: {
expression: $ => prec.left(choice(
$.function_call,
$.identifier,
$.scope_resolution,
)),
function_call: $ => choice(
seq($.identifier, $.expression),
prec(1, seq($.identifier, $.block)),
prec(-1, seq($.identifier, $.do_block)),
seq($.identifier, prec(1, seq($.expression, $.block))),
seq($.identifier, prec(-1, seq($.expression, $.do_block))),
),
scope_resolution: $ => prec.left(1, choice(
seq($.expression, '::', $.expression),
seq('::', $.expression),
)),
block: _ => '{}',
do_block: _ => 'do end',
identifier: _ => /[a-zA-Z]+/,
},
});

View file

@ -1,135 +0,0 @@
{
"name": "precedence_on_subsequence",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"expression": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "function_call"},
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "scope_resolution"}
]
}
},
"function_call": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "expression"}
]
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "block"}
]
}
},
{
"type": "PREC",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{"type": "SYMBOL", "name": "do_block"}
]
}
},
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "SYMBOL", "name": "block"}
]
}
}
]
},
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "identifier"},
{
"type": "PREC",
"value": -1,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "SYMBOL", "name": "do_block"}
]
}
}
]
}
]
},
"scope_resolution": {
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "::"},
{"type": "SYMBOL", "name": "expression"}
]
},
{
"type": "SEQ",
"members": [
{"type": "STRING", "value": "::"},
{"type": "SYMBOL", "name": "expression"}
]
}
]
}
},
"block": {
"type": "STRING",
"value": "{}"
},
"do_block": {
"type": "STRING",
"value": "do end"
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z]+"
}
}
}

View file

@ -0,0 +1,36 @@
module.exports = grammar({
name: 'precedence_on_token',
extras: $ => [
/\s/,
$.comment,
],
rules: {
program: $ => repeat(choice(
$.string,
$.regex,
$.identifier,
$.slash,
)),
comment: _ => token(prec(1, /\/\/.*|\/\*[^*]*\*\//)),
string: $ => seq(
'"',
repeat(choice(
token(prec(2, /[^\"\n\\]+/)),
$.escape_sequence,
)),
'"',
),
escape_sequence: _ => /\\./,
regex: _ => /\/[^\/\n]+\/[a-z]*/,
identifier: _ => /[a-z]\w*/,
slash: _ => '/',
},
});

View file

@ -1,100 +0,0 @@
{
"name": "precedence_on_token",
"extras": [
{"type": "SYMBOL", "name": "comment"},
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"program": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "regex"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "slash"
}
]
}
},
"comment": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "PATTERN",
"value": "//.*|/\\*[^*]*\\*/"
}
}
},
"string": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "\""},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 2,
"content": {
"type": "PATTERN",
"value": "[^\"\n\\\\]+"
}
}
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
}
},
{"type": "STRING", "value": "\""}
]
},
"escape_sequence": {
"type": "PATTERN",
"value": "\\\\."
},
"regex": {
"type": "PATTERN",
"value": "/[^/\n]+/[a-z]*"
},
"identifier": {
"type": "PATTERN",
"value": "[a-z]\\w*"
},
"slash": {
"type": "STRING",
"value": "/"
}
}
}

View file

@ -0,0 +1,36 @@
module.exports = grammar({
name: 'readme_grammar',
// Things that can appear anywhere in the language, like comments
// and whitespace, are expressed as 'extras'.
extras: $ => [
/\s/,
$.comment,
],
rules: {
// The first rule listed in the grammar becomes the 'start rule'.
expression: $ => choice(
$.sum,
$.product,
$.number,
$.variable,
seq('(', $.expression, ')'),
),
// Tokens like '+' and '*' are described directly within the
// grammar's rules, as opposed to in a separate lexer description.
sum: $ => prec.left(1, seq($.expression, '+', $.expression)),
// Ambiguities can be resolved at compile time by assigning precedence
// values to rule subtrees.
product: $ => prec.left(2, seq($.expression, '*', $.expression)),
// Tokens can be specified using ECMAScript regexps.
number: _ => /\d+/,
comment: _ => /#.*/,
variable: _ => /[a-zA-Z]\w*/,
},
});

View file

@ -1,67 +0,0 @@
{
"name": "readme_grammar",
// Things that can appear anywhere in the language, like comments
// and whitespace, are expressed as 'extras'.
"extras": [
{"type": "PATTERN", "value": "\\s"},
{"type": "SYMBOL", "name": "comment"}
],
"rules": {
// The first rule listed in the grammar becomes the 'start rule'.
"expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "sum"},
{"type": "SYMBOL", "name": "product"},
{"type": "SYMBOL", "name": "number"},
{"type": "SYMBOL", "name": "variable"},
{
"type": "SEQ",
"members": [
{"type": "STRING", "value": "("},
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": ")"}
]
}
]
},
// Tokens like '+' and '*' are described directly within the
// grammar's rules, as opposed to in a separate lexer description.
"sum": {
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "+"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
// Ambiguities can be resolved at compile time by assigning precedence
// values to rule subtrees.
"product": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "expression"},
{"type": "STRING", "value": "*"},
{"type": "SYMBOL", "name": "expression"}
]
}
},
// Tokens can be specified using ECMAScript regexps.
"number": {"type": "PATTERN", "value": "\\d+"},
"comment": {"type": "PATTERN", "value": "#.*"},
"variable": {"type": "PATTERN", "value": "[a-zA-Z]\\w*"}
}
}

View file

@ -0,0 +1,7 @@
module.exports = grammar({
name: 'start_rule_is_blank',
rules: {
first_rule: _ => blank(),
},
});

View file

@ -1,6 +0,0 @@
{
"name": "start_rule_is_blank",
"rules": {
"first_rule": {"type": "BLANK"}
}
}

View file

@ -0,0 +1,7 @@
module.exports = grammar({
name: 'start_rule_is_token',
rules: {
first_rule: _ => 'the-value',
},
});

View file

@ -1,6 +0,0 @@
{
"name": "start_rule_is_token",
"rules": {
"first_rule": {"type": "STRING", "value": "the-value"}
}
}

View file

@ -0,0 +1,20 @@
module.exports = grammar({
name: 'unicode_classes',
rules: {
program: $ => repeat(choice(
$.lower,
$.upper,
$.math_sym,
$.letter_number,
)),
lower: _ => /\p{Ll}\p{L}*/,
upper: _ => /\p{Lu}\p{L}*/,
math_sym: _ => /\p{Sm}+/,
letter_number: _ => /\p{Letter_Number}/,
},
});

View file

@ -1,42 +0,0 @@
{
"name": "unicode_classes",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"program": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "lower"},
{"type": "SYMBOL", "name": "upper"},
{"type": "SYMBOL", "name": "math_sym"},
{"type": "SYMBOL", "name": "letter_number"}
]
}
},
"lower": {
"type": "PATTERN",
"value": "\\p{Ll}\\p{L}*"
},
"upper": {
"type": "PATTERN",
"value": "\\p{Lu}\\p{L}*"
},
"math_sym": {
"type": "PATTERN",
"value": "\\p{Sm}+"
},
"letter_number": {
"type": "PATTERN",
"value": "\\p{Letter_Number}"
}
}
}

View file

@ -0,0 +1,27 @@
module.exports = grammar({
name: 'unused_rules',
rules: {
a: $ => seq($.d, $.h),
b: _ => 'B',
c: _ => 'C',
d: $ => seq($.e, $.f),
e: _ => 'E',
f: _ => 'F',
g: _ => 'G',
h: $ => seq($.i, $.j),
i: _ => 'I',
j: _ => 'J',
k: _ => 'K',
},
});

View file

@ -1,73 +0,0 @@
{
"name": "unused_rules",
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"a": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "d"},
{"type": "SYMBOL", "name": "h"}
]
},
"b": {
"type": "STRING",
"value": "B"
},
"c": {
"type": "STRING",
"value": "C"
},
"d": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "e"},
{"type": "SYMBOL", "name": "f"}
]
},
"e": {
"type": "STRING",
"value": "E"
},
"f": {
"type": "STRING",
"value": "F"
},
"g": {
"type": "STRING",
"value": "G"
},
"h": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "i"},
{"type": "SYMBOL", "name": "j"}
]
},
"i": {
"type": "STRING",
"value": "I"
},
"j": {
"type": "STRING",
"value": "J"
},
"k": {
"type": "STRING",
"value": "K"
}
}
}

View file

@ -0,0 +1,36 @@
module.exports = grammar({
name: 'uses_current_column',
externals: $ => [
$._indent,
$._dedent,
$._newline,
],
rules: {
block: $ => repeat1($._statement),
_statement: $ => seq($._expression, $._newline),
_expression: $ => choice(
$.do_expression,
$.binary_expression,
$.identifier,
),
do_expression: $ => seq(
'do',
$._indent,
$.block,
$._dedent,
),
binary_expression: $ => prec.left(1, seq(
$._expression,
choice('=', '+', '-'),
$._expression,
)),
identifier: _ => /\w+/,
},
});

View file

@ -1,69 +0,0 @@
{
"name": "uses_current_column",
"externals": [
{"type": "SYMBOL", "name": "_indent"},
{"type": "SYMBOL", "name": "_dedent"},
{"type": "SYMBOL", "name": "_newline"}
],
"extras": [
{"type": "PATTERN", "value": "\\s"}
],
"rules": {
"block": {
"type": "REPEAT1",
"content": {"type": "SYMBOL", "name": "_statement"}
},
"_statement": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "_expression"},
{"type": "SYMBOL", "name": "_newline"}
]
},
"_expression": {
"type": "CHOICE",
"members": [
{"type": "SYMBOL", "name": "do_expression"},
{"type": "SYMBOL", "name": "binary_expression"},
{"type": "SYMBOL", "name": "identifier"}
]
},
"do_expression": {
"type": "SEQ",
"members": [
{"type": "STRING", "value": "do"},
{"type": "SYMBOL", "name": "_indent"},
{"type": "SYMBOL", "name": "block"},
{"type": "SYMBOL", "name": "_dedent"}
]
},
"binary_expression": {
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{"type": "SYMBOL", "name": "_expression"},
{
"type": "CHOICE",
"members": [
{"type": "STRING", "value": "="},
{"type": "STRING", "value": "+"},
{"type": "STRING", "value": "-"}
]
},
{"type": "SYMBOL", "name": "_expression"}
]
}
},
"identifier": {"type": "PATTERN", "value": "\\w+"}
}
}