diff --git a/.changeset/wild-jobs-poke.md b/.changeset/wild-jobs-poke.md new file mode 100644 index 0000000..f02b9e7 --- /dev/null +++ b/.changeset/wild-jobs-poke.md @@ -0,0 +1,5 @@ +--- +"@ast-grep/lang-swift": patch +--- + +Add @ast-grep/lang-swift diff --git a/packages/swift/README.md b/packages/swift/README.md new file mode 100644 index 0000000..b28b3fa --- /dev/null +++ b/packages/swift/README.md @@ -0,0 +1,24 @@ +# ast-grep napi language for swift + +## Installation + +In a pnpm project, run: + +```bash +pnpm install @ast-grep/lang-swift +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 swift from '@ast-grep/lang-swift' +import { registerDynamicLanguage, parse } from '@ast-grep/napi' + +registerDynamicLanguage({ swift }) + +const sg = parse('swift', `your code`) +sg.root().kind() +``` diff --git a/packages/swift/index.d.ts b/packages/swift/index.d.ts new file mode 100644 index 0000000..11140a6 --- /dev/null +++ b/packages/swift/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/swift/index.js b/packages/swift/index.js new file mode 100644 index 0000000..7ae6938 --- /dev/null +++ b/packages/swift/index.js @@ -0,0 +1,9 @@ +const path = require('node:path') +const libPath = path.join(__dirname, 'parser.so') + +module.exports = { + libraryPath: libPath, + extensions: ['swift'], + languageSymbol: 'tree_sitter_swift', + expandoChar: 'ยต', +} diff --git a/packages/swift/nursery.js b/packages/swift/nursery.js new file mode 100644 index 0000000..3f82063 --- /dev/null +++ b/packages/swift/nursery.js @@ -0,0 +1,16 @@ +const { setup } = require('@ast-grep/nursery') +const assert = require('node:assert') +const languageRegistration = require('./index') + +setup({ + dirname: __dirname, + name: 'swift', + treeSitterPackage: 'tree-sitter-swift', + languageRegistration, + testRunner: parse => { + const sg = parse('println("123")') + const root = sg.root() + const node = root.find('println("123")') + assert.equal(node.kind(), 'call_expression') + }, +}) diff --git a/packages/swift/package.json b/packages/swift/package.json new file mode 100644 index 0000000..9e5de06 --- /dev/null +++ b/packages/swift/package.json @@ -0,0 +1,47 @@ +{ + "name": "@ast-grep/lang-swift", + "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-swift": "0.7.0" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "pnpm": { + "onlyBuiltDependencies": ["@ast-grep/lang-swift", "tree-sitter-cli"] + } +} diff --git a/packages/swift/postinstall.js b/packages/swift/postinstall.js new file mode 100644 index 0000000..b9141ff --- /dev/null +++ b/packages/swift/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 d9dc4cf..c180c17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -242,6 +242,22 @@ importers: specifier: 0.24.6 version: 0.24.6 + packages/swift: + 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-swift: + specifier: 0.7.0 + version: 0.7.0(tree-sitter@0.21.1) + packages/toml: dependencies: '@ast-grep/setup-lang': @@ -928,6 +944,11 @@ packages: tree-sitter: optional: true + tree-sitter-cli@0.23.2: + resolution: {integrity: sha512-kPPXprOqREX+C/FgUp2Qpt9jd0vSwn+hOgjzVv/7hapdoWpa+VeWId53rf4oNNd29ikheF12BYtGD/W90feMbA==} + engines: {node: '>=12.0.0'} + hasBin: true + tree-sitter-cli@0.24.6: resolution: {integrity: sha512-FJ9B1XwXt8Auq75NK/6bpeci7avXSk73OMDq4elXHPS4ue11ZFeCrH/anVN/u5BAZjWqFO9nWGLNEdpdZOg+eA==} engines: {node: '>=12.0.0'} @@ -1006,6 +1027,15 @@ packages: tree-sitter: optional: true + tree-sitter-swift@0.7.0: + resolution: {integrity: sha512-cALPEQXdv60VBVTTCvvtJXNGcNchUr/olqtVPuEIovQ5yqRibnt1fNFxDD5ggcjEaA+IN1ggPdU3yT51ucesYw==} + peerDependencies: + tree-sitter: ^0.22.1 + tree_sitter: '*' + peerDependenciesMeta: + tree_sitter: + optional: true + tree-sitter@0.21.1: resolution: {integrity: sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==} @@ -1631,6 +1661,8 @@ snapshots: node-addon-api: 8.3.0 node-gyp-build: 4.8.4 + tree-sitter-cli@0.23.2: {} + tree-sitter-cli@0.24.6: {} tree-sitter-cpp@0.23.4: @@ -1693,6 +1725,14 @@ snapshots: optionalDependencies: tree-sitter: 0.21.1 + tree-sitter-swift@0.7.0(tree-sitter@0.21.1): + dependencies: + node-addon-api: 8.3.1 + node-gyp-build: 4.8.4 + tree-sitter: 0.21.1 + tree-sitter-cli: 0.23.2 + which: 2.0.2 + tree-sitter@0.21.1: dependencies: node-addon-api: 8.3.1