From aa73fa6aaae2122a566e9b80f723d2f26edb62d0 Mon Sep 17 00:00:00 2001 From: Nathan Gendron Date: Tue, 1 Apr 2025 13:33:29 -0400 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20dart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/dart/README.md | 24 ++++++++++++++++++ packages/dart/index.d.ts | 10 ++++++++ packages/dart/index.js | 9 +++++++ packages/dart/nursery.js | 12 +++++++++ packages/dart/package.json | 47 ++++++++++++++++++++++++++++++++++++ packages/dart/postinstall.js | 4 +++ pnpm-lock.yaml | 28 +++++++++++++++++++++ 7 files changed, 134 insertions(+) create mode 100644 packages/dart/README.md create mode 100644 packages/dart/index.d.ts create mode 100644 packages/dart/index.js create mode 100644 packages/dart/nursery.js create mode 100644 packages/dart/package.json create mode 100644 packages/dart/postinstall.js diff --git a/packages/dart/README.md b/packages/dart/README.md new file mode 100644 index 00000000..6dcb52dc --- /dev/null +++ b/packages/dart/README.md @@ -0,0 +1,24 @@ +# ast-grep napi language for dart + +## Installation + +In a pnpm project, run: + +```bash +pnpm install @ast-grep/lang-dart +pnpm install @ast-grep/napi +# install the tree-sitter-cli if no prebuild is available +pnpm install @tree-sitter/cli --save-dev +``` + +## Usage + +```js +import dart from '@ast-grep/lang-dart' +import { registerDynamicLanguage, parse } from '@ast-grep/napi' + +registerDynamicLanguage({ dart }) + +const sg = parse('dart', `your code`) +sg.root().kind() +``` diff --git a/packages/dart/index.d.ts b/packages/dart/index.d.ts new file mode 100644 index 00000000..11140a65 --- /dev/null +++ b/packages/dart/index.d.ts @@ -0,0 +1,10 @@ +type LanguageRegistration = { + libraryPath: string + extensions: string[] + languageSymbol?: string + metaVarChar?: string + expandoChar?: string +} + +declare const registration: LanguageRegistration +export default registration diff --git a/packages/dart/index.js b/packages/dart/index.js new file mode 100644 index 00000000..085f47ed --- /dev/null +++ b/packages/dart/index.js @@ -0,0 +1,9 @@ +const path = require('node:path') +const libPath = path.join(__dirname, 'parser.so') + +module.exports = { + libraryPath: libPath, + extensions: ['dart'], + languageSymbol: 'tree_sitter_dart', + expandoChar: '$', +} diff --git a/packages/dart/nursery.js b/packages/dart/nursery.js new file mode 100644 index 00000000..0b88f539 --- /dev/null +++ b/packages/dart/nursery.js @@ -0,0 +1,12 @@ +const { setup } = require('@ast-grep/nursery') +const languageRegistration = require('./index') + +setup({ + dirname: __dirname, + name: 'dart', + treeSitterPackage: 'tree-sitter-dart', + languageRegistration, + testRunner: parse => { + // add test here + }, +}) diff --git a/packages/dart/package.json b/packages/dart/package.json new file mode 100644 index 00000000..640ee208 --- /dev/null +++ b/packages/dart/package.json @@ -0,0 +1,47 @@ +{ + "name": "@ast-grep/lang-dart", + "version": "0.0.1", + "description": "", + "main": "index.js", + "scripts": { + "build": "tree-sitter build -o parser.so", + "source": "node nursery.js source", + "prepublishOnly": "node nursery.js source", + "postinstall": "node postinstall.js", + "test": "node nursery.js test" + }, + "files": [ + "index.js", + "index.d.ts", + "type.d.ts", + "postinstall.js", + "src", + "prebuilds" + ], + "keywords": ["ast-grep"], + "author": "", + "license": "ISC", + "dependencies": { + "@ast-grep/setup-lang": "0.0.3" + }, + "peerDependencies": { + "tree-sitter-cli": "0.24.6" + }, + "peerDependenciesMeta": { + "tree-sitter-cli": { + "optional": true + } + }, + "devDependencies": { + "@ast-grep/nursery": "0.0.2", + "tree-sitter-cli": "0.24.6", + "tree-sitter-dart": "1.0.0" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "pnpm": { + "onlyBuiltDependencies": ["@ast-grep/lang-dart", "tree-sitter-cli"] + } +} diff --git a/packages/dart/postinstall.js b/packages/dart/postinstall.js new file mode 100644 index 00000000..b9141ffc --- /dev/null +++ b/packages/dart/postinstall.js @@ -0,0 +1,4 @@ +const { postinstall } = require('@ast-grep/setup-lang') +postinstall({ + dirname: __dirname, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4998e47f..6c2bcb49 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,6 +114,22 @@ importers: specifier: 0.23.2 version: 0.23.2 + packages/dart: + dependencies: + '@ast-grep/setup-lang': + specifier: 0.0.3 + version: 0.0.3 + devDependencies: + '@ast-grep/nursery': + specifier: 0.0.2 + version: 0.0.2 + tree-sitter-cli: + specifier: 0.24.6 + version: 0.24.6 + tree-sitter-dart: + specifier: 1.0.0 + version: 1.0.0 + packages/go: dependencies: '@ast-grep/setup-lang': @@ -658,6 +674,9 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + nan@2.22.2: + resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -866,6 +885,9 @@ packages: tree-sitter: optional: true + tree-sitter-dart@1.0.0: + resolution: {integrity: sha512-Ve5YMPJjjGW9LEsO+MngAOibQsw5obFp+bUT41pvwdcXWRwJImOWs3eaPi6AubEiBmc09qvhdvxeIXvxlhMnug==} + tree-sitter-go@0.23.4: resolution: {integrity: sha512-iQaHEs4yMa/hMo/ZCGqLfG61F0miinULU1fFh+GZreCRtKylFLtvn798ocCZjO2r/ungNZgAY1s1hPFyAwkc7w==} peerDependencies: @@ -1377,6 +1399,8 @@ snapshots: mri@1.2.0: {} + nan@2.22.2: {} + node-addon-api@7.1.1: {} node-addon-api@8.3.0: {} @@ -1527,6 +1551,10 @@ snapshots: node-addon-api: 8.3.1 node-gyp-build: 4.8.4 + tree-sitter-dart@1.0.0: + dependencies: + nan: 2.22.2 + tree-sitter-go@0.23.4(tree-sitter@0.21.1): dependencies: node-addon-api: 8.3.1 From fdf167c1e208d46062e17eecf67d6d7387febc9a Mon Sep 17 00:00:00 2001 From: Nathan Gendron Date: Wed, 2 Apr 2025 14:08:01 -0400 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9C=85=20Add=20test=20for=20Dart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/dart/nursery.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/dart/nursery.js b/packages/dart/nursery.js index 0b88f539..464d8949 100644 --- a/packages/dart/nursery.js +++ b/packages/dart/nursery.js @@ -1,4 +1,5 @@ const { setup } = require('@ast-grep/nursery') +const assert = require('node:assert') const languageRegistration = require('./index') setup({ @@ -7,6 +8,9 @@ setup({ treeSitterPackage: 'tree-sitter-dart', languageRegistration, testRunner: parse => { - // add test here + const sg = parse('var a = 123;') + const root = sg.root() + const node = root.find('a') + assert.equal(node.kind(), 'identifier') }, }) From 201d604c91e2946a29577dbf49e80c8e0aec1810 Mon Sep 17 00:00:00 2001 From: Nathan Gendron Date: Fri, 4 Apr 2025 15:12:18 -0400 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=93=9D=20Add=20changeset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/yummy-hats-sniff.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/yummy-hats-sniff.md diff --git a/.changeset/yummy-hats-sniff.md b/.changeset/yummy-hats-sniff.md new file mode 100644 index 00000000..69646f7d --- /dev/null +++ b/.changeset/yummy-hats-sniff.md @@ -0,0 +1,5 @@ +--- +"@ast-grep/lang-dart": patch +--- + +Add @ast-grep/lang-dart