{"_id":"@alint-js/languages","_rev":"10-877decccbfa395b47ac7ff2270dc4e8b","name":"@alint-js/languages","dist-tags":{"latest":"0.7.1"},"versions":{"0.1.5":{"name":"@alint-js/languages","version":"0.1.5","_id":"@alint-js/languages@0.1.5","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"432c31c39454fd09553d330f48b06a48d385ed43","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.1.5.tgz","fileCount":5,"integrity":"sha512-oY1i16MOe9rUf8iXjSGgE8W9IwPCY28qy6oIKJhIj9G652k/loZY/ZLwCV8Dg0wppXhzN6Mqbf+2OCuJXhWrNA==","signatures":[{"sig":"MEQCIEYVg7t+chMdtLqNKeAbAO9Mn71imMNfVPDmXAzdSwGzAiB4PI6huIs3zpZzgV3HLWS9/K2uSh1SuMdZNsaH6fUY2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43606},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"directories":{},"_nodeVersion":"24.18.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.1.5","@alint-js/plugin":"0.1.5"},"peerDependencies":{"@alint-js/core":"0.1.5"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.1.5_1785237061355_0.6652977136248004","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@alint-js/languages","version":"0.2.0","_id":"@alint-js/languages@0.2.0","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"747dc4f4c9f00e9d3fd18eedf4583529bec29850","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.2.0.tgz","fileCount":5,"integrity":"sha512-nAu8fvia+7slhb/E9MapjPNQkzR9HmujEOu8e0VXqNZnRXpqp3dvf7R3CBjp4g4pkQmDYfkhffQCy603A99huw==","signatures":[{"sig":"MEUCIQC4aDYhZNWxkN6/xfIn0KG1u8gGNLpjRLDlodOA6wMN7QIgR3IjzAOz2DW/bqU+h1zFbCQ366wvMIT88tVbzxo8CtM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43606},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"directories":{},"_nodeVersion":"24.18.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.2.0","@alint-js/plugin":"0.2.0"},"peerDependencies":{"@alint-js/core":"0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.2.0_1785410226989_0.30411739864537024","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@alint-js/languages","version":"0.3.0","_id":"@alint-js/languages@0.3.0","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"ef2bdb786eed37052a9689b60e29e507993203a6","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.3.0.tgz","fileCount":5,"integrity":"sha512-k6Wzt7Pe+yOnll0htPBwEKUI+iQcDgxV16GhhhB+aF6JKajB59EpZ4YYSHAFi92YBTk3ZRrqKkJPfyAgT0CCLw==","signatures":[{"sig":"MEQCIGHjhnbJXNAMxTU6AiksNbgAg46GtBjn74vxLToKBFSzAiA+bfIml0HNJU1u9anAgQaw0bIJHVeGgYfVgsDR7k+PMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43626},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"directories":{},"_nodeVersion":"24.18.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.3.0","@alint-js/plugin":"0.3.0"},"peerDependencies":{"@alint-js/core":"0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.3.0_1785760982806_0.1000265749415048","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@alint-js/languages","version":"0.3.1","_id":"@alint-js/languages@0.3.1","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"c60ec5c3b58393a95580546604f66d18ada604b6","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.3.1.tgz","fileCount":5,"integrity":"sha512-MhYBXafFxELT/l4LPXm+LkgtFo+WrYhf8WrkR+eDDhv/DfakiU5IfmzHHvrj7cFAtNUbVXfyYFSN52Y6hhLTAw==","signatures":[{"sig":"MEUCIFMJqhBuHMc/S3Q8GuYE1xqUJvL1isQ7I04q74OXmIWwAiEAuUgXbZAsDFNp9popTDDKyWN7CWWCcqZP2ydj0npll7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43626},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"directories":{},"_nodeVersion":"24.18.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.3.1","@alint-js/plugin":"0.3.1"},"peerDependencies":{"@alint-js/core":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.3.1_1785775112466_0.7879338951131205","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@alint-js/languages","version":"0.3.2","_id":"@alint-js/languages@0.3.2","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"04bfa9ba3e1abb62db05a85255b179ad263b1df0","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.3.2.tgz","fileCount":5,"integrity":"sha512-LAucCtK0HYcBfWk8fkz1S0lIo+U0TbIOO6amer1zvO/WU/7IiT75SG0S5GoNMDBnRV2ZerOLbRZf+jTQexQivg==","signatures":[{"sig":"MEUCIFrIbVMy+Mkp0N1W9PAseAOQESqvlLCawXiPU3bLVMAAAiEAjeVxWtjBeJzv2a7K4lby0zJiWdSxJeuIbRP6zcEKxCo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43626},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"directories":{},"_nodeVersion":"24.18.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.3.2","@alint-js/plugin":"0.3.2"},"peerDependencies":{"@alint-js/core":"0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.3.2_1785863529189_0.838448507108744","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@alint-js/languages","version":"0.4.0","_id":"@alint-js/languages@0.4.0","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"33f57447ba941d1fa436b804271ecd3267601956","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.4.0.tgz","fileCount":5,"integrity":"sha512-qtiuK0xK+wwtL8NRl3Jw5zGhl/n19eUg79gxmcQtf3XG1qcuS18Zx8RY61/wXTs4gDDz8rztQ96+TsyPtGXeEg==","signatures":[{"sig":"MEUCIEYBTRS+iBeFNwg0ELi9ksxKH3HzpWX1L/GmT09heuILAiEA+9gCSfiup7gh5oqH9fBKj0XKKVurw4NGk0rdfmOSqsw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43626},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"directories":{},"_nodeVersion":"24.18.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.4.0","@alint-js/plugin":"0.4.0"},"peerDependencies":{"@alint-js/core":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.4.0_1786127603771_0.7764836410910416","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@alint-js/languages","version":"0.5.0","_id":"@alint-js/languages@0.5.0","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"fd0c34953b89b3a62c27c6bce756f348a490e511","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.5.0.tgz","fileCount":5,"integrity":"sha512-VmP9OPjYJIsHigCYbJcjaYrPI0yuIzDLNoIdpmfrTQk6349g4TzubyMSJ1PlQtZwUTdvEWrRJxIsgxg2npg2Og==","signatures":[{"sig":"MEYCIQCw5tfwqdCeh9qYvuoFR1g20RjapJ/GCoz+M7J4UrhqCgIhAN8UHsOBZJOGufWV/PcECKfRwj1Rf0knRZSAOlxGUh2I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45365},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"directories":{},"_nodeVersion":"24.19.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.5.0","@alint-js/plugin":"0.5.0"},"peerDependencies":{"@alint-js/core":"0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.5.0_1786864098332_0.6257900234557545","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@alint-js/languages","version":"0.6.0","keywords":["alint","lint","tree-sitter","go","python","rust"],"license":"MIT","_id":"@alint-js/languages@0.6.0","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"bbc2411fe8fc04cd595235779118625bedd3e1aa","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.6.0.tgz","fileCount":5,"integrity":"sha512-U3Ucr2LvU1vRoUW2I5406gMbrILiVIwKF+mWukQElvv8qB7c4nBDmIFJ9rmoPecFzXsHW4BitNgxOmLklSmCmQ==","signatures":[{"sig":"MEQCIGmXMmqth2VlT28B3GBhFZvzjff14AC/P9ai9ty9DK3WAiAoCC0xAtWElstSSslZgDbVIZ7IIpGnl+gqyarahoRR+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45944},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"repository":{"url":"git+https://github.com/moeru-ai/alint.git","type":"git","directory":"packages/languages"},"description":"First-party Go, Python, and Rust language support for alint","directories":{},"_nodeVersion":"24.19.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.6.0","@alint-js/plugin":"0.6.0"},"peerDependencies":{"@alint-js/core":"0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.6.0_1787133859860_0.7688837311957823","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@alint-js/languages","version":"0.7.0","keywords":["alint","lint","tree-sitter","go","python","rust"],"license":"MIT","_id":"@alint-js/languages@0.7.0","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"dist":{"shasum":"a6f549f56771cc5b3dc3779cf1862cb4a734bf9f","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.7.0.tgz","fileCount":5,"integrity":"sha512-d7DgZON4ESHY8RycC3LQPcViXllg3w6XbNx2B0G1cpQq7Lwnz7DehRjgexkZmlDBCsLu/kjrbMoaa7bpxNhsAA==","signatures":[{"sig":"MEUCIQDNgGLuNFe6ogs75gV1T6LqJfndx2tvTLa4OdHbmrmpjwIgaPZhnBt/UMw43lCKhjRD68mtyfenbYmgtrn9viUu61A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45944},"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run --config vitest.config.ts","build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"repository":{"url":"git+https://github.com/moeru-ai/alint.git","type":"git","directory":"packages/languages"},"description":"First-party Go, Python, and Rust language support for alint","directories":{},"_nodeVersion":"24.19.0","dependencies":{"web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"@alint-js/core":"0.7.0","@alint-js/plugin":"0.7.0"},"peerDependencies":{"@alint-js/core":"0.7.0"},"_npmOperationalInternal":{"tmp":"tmp/languages_0.7.0_1787937694894_0.6873202279769985","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@alint-js/languages","type":"module","version":"0.7.1","description":"First-party Go, Python, and Rust language support for alint","license":"MIT","repository":{"type":"git","url":"git+https://github.com/moeru-ai/alint.git","directory":"packages/languages"},"keywords":["alint","lint","tree-sitter","go","python","rust"],"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"peerDependencies":{"@alint-js/core":"0.7.1"},"dependencies":{"tree-sitter-wasms":"^0.1.13","web-tree-sitter":"^0.24.7"},"devDependencies":{"@alint-js/core":"0.7.1","@alint-js/plugin":"0.7.1"},"scripts":{"build":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run --config vitest.config.ts"},"_nodeVersion":"24.19.0","_id":"@alint-js/languages@0.7.1","dist":{"integrity":"sha512-5PLAouRJncfVEKBRx3pE8OHSF2PSXrvub/inIjJx+96bC9ZtPVZxuDsUbCVbB9wGL2gutqocjwZ17bj3ZkIP5Q==","shasum":"c5fc1f6693a95eb132128c995c1ab9318bc4446b","tarball":"https://registry.npmjs.org/@alint-js/languages/-/languages-0.7.1.tgz","fileCount":5,"unpackedSize":45944,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCePnyLm3UyboJmF8OygddCMN2ELFfiKzeRzDeMxlRGIgIgOfxy6MtoOXQQytdN288A0W5d6gDwyhtO6fHjoQ1k00o="}]},"_npmUser":{"name":"nekomeowww","email":"neko@ayaka.moe"},"directories":{},"maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/languages_0.7.1_1788006409181_0.9601939464336902"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-28T11:11:01.101Z","modified":"2026-08-29T12:26:49.523Z","0.1.5":"2026-07-28T11:11:01.476Z","0.2.0":"2026-07-30T11:17:07.123Z","0.3.0":"2026-08-03T12:43:02.929Z","0.3.1":"2026-08-03T16:38:32.621Z","0.3.2":"2026-08-04T17:12:09.386Z","0.4.0":"2026-08-07T18:33:23.908Z","0.5.0":"2026-08-16T07:08:18.471Z","0.6.0":"2026-08-19T10:04:19.998Z","0.7.0":"2026-08-28T17:21:35.032Z","0.7.1":"2026-08-29T12:26:49.351Z"},"license":"MIT","keywords":["alint","lint","tree-sitter","go","python","rust"],"repository":{"type":"git","url":"git+https://github.com/moeru-ai/alint.git","directory":"packages/languages"},"description":"First-party Go, Python, and Rust language support for alint","maintainers":[{"name":"nekomeowww","email":"neko@ayaka.moe"}],"readme":"# `@alint-js/languages`\n\n> [!IMPORTANT]\n> This package is a WIP. APIs may be subject to major changes.\n\nFirst-party language support for alint, beyond the JavaScript and TypeScript that core has built in.\nAdds Go, Python and Rust.\n\n## What it does\n\nA plugin that declares languages and nothing else — no rules, no processors. Registering it means\nevery rule in the run, from every plugin, starts receiving function targets for `.go`, `.py` and\n`.rs` files. A rule needs no parser of its own and no dependency on this package.\n\nEach function target carries a `FunctionInfo` under `metadata.function`: which statements the body\nholds, whether it is a single expression, where its comments are, which names it declares, which\nidentifiers may be renamed, and whether it is reachable from outside its file. The file target\ncarries every call site under `metadata.calls`, including calls made outside any function.\n\n`FunctionInfo` is core's contract, and core's own JavaScript producer fills in the same fields, so\na rule reads one shape whatever parsed the file.\n\n## How to use\n\n```bash\nnpm install -D @alint-js/languages\n```\n\n```ts\nimport languages from '@alint-js/languages'\n\nimport { defineConfig } from '@alint-js/cli'\n\nexport default defineConfig([\n  {\n    files: ['**/*.{go,py,rs}'],\n    plugins: { languages },\n  },\n])\n```\n\nThe alias is arbitrary: languages register under their own names, not the plugin's.\n\nA rule opts in to what it can read by declaring `languages`:\n\n```ts\ndefineRule({\n  create: () => ({ onTargetFunction: (target) => { /* ... */ } }),\n  languages: 'any', // or ['go', 'rust'] to scope, which fails the run if nothing provides them\n})\n```\n\nFrom a static (TOML) config, point a directory specifier at your own installed copy:\n\n```toml\nplugin_languages = \"./node_modules/@alint-js/languages\"\n```\n\nThe directory lock records physical identity, so upgrading the package re-locks it. Re-run\n`alint plugin install` when it says the target changed.\n\n## Add a language\n\nThis package reads the prebuilt grammars in `tree-sitter-wasms`. That dependency supplies 36\ngrammars, and this package uses three of them (by the time this is written). A new language needs a query, not a grammar. The\nquery maps the node names of the grammar to the six captures that `extract.ts` reads.\n\nTo add a language, do these steps:\n\n1. Add the file name of the grammar to `GRAMMAR` in `src/grammar.ts`.\n2. Add the query to `QUERIES` in `src/queries.ts`.\n3. Add a case to `isExported` in `src/extract.ts`.\n4. Add a `LanguageDefinition` to `src/index.ts`.\n5. Add the new language to `languagesPlugin` in the same file.\n6. Add a test for the new language to `src/extract.test.ts`.\n\nNote: `LanguageId` comes from the keys of `GRAMMAR`. After step 1, the code does not compile until\nyou complete step 2 and step 3. The compiler gives no error for step 4, step 5, or step 6.\n\nTo find the node names of a grammar, read the `grammar.js` file of that tree-sitter parser.\n\nCAUTION: Make sure that the grammar uses these three node names. If the grammar uses other names,\nthe code still compiles and `FunctionInfo` is wrong:\n\n- `block` is the node type of a branch or a loop (`holdsBlock` in `src/extract.ts`).\n- `body` is the field name for the body of a function (`bodyStatements`).\n- `name` is the field name for the name of a function (`withOwnName`).\n\nGo, Python, and Rust use these three names. Other grammars use other names. For example, TypeScript\ncalls the block `statement_block`.\n\n## When to use\n\n- Your project has Go, Python or Rust files and you want rules to see functions in them rather than\n  raw text.\n- You are writing a rule that works from `FunctionInfo` and want it to cover more than JavaScript\n  without importing a parser.\n\n## When not to use\n\n- You only lint JavaScript and TypeScript. Core's built-in oxc producer already covers those, and\n  this package would add roughly 6 MB of grammars for nothing.\n- You want to distribute it through the plugin store. The store installs one tarball and no\n  dependencies, and the grammars are resolved from `node_modules` at runtime. Install it with your\n  package manager instead — the same way agent adapters are installed.\n\n## Notes\n\n- Parsing is done with [tree-sitter](https://tree-sitter.github.io/tree-sitter/), which is an\n  implementation detail: nothing in the public surface names it, and a language could move to a\n  different parser without the config changing.\n- Pinned to `web-tree-sitter` 0.24.x. 0.25 rewrote the WASM loader and rejects the prebuilt\n  `tree-sitter-wasms` grammars, which still carry the legacy `dylink` section.\n- Extensions core already owns (`.js`, `.jsx`, `.ts`, `.tsx`, and the rest) are deliberately not\n  claimed here. Two plugins claiming one extension is an error, not a fallback.\n","readmeFilename":""}