From 2340129694f94820c5b12811247494f38272a025 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Mon, 8 Dec 2025 13:17:22 -0500 Subject: [PATCH] build: update package files Steps: rm Cargo.toml Package.swift pyproject.toml package.json setup.py tree-sitter init npm install cargo test --- Cargo.toml | 24 ++++++--- Package.swift | 64 +++++++++++------------ README.md | 9 ++++ package-lock.json | 127 +++++++++++++++++++--------------------------- package.json | 46 +++++++++-------- pyproject.toml | 17 +++---- setup.py | 45 +++++++++++----- tree-sitter.json | 8 +++ 8 files changed, 180 insertions(+), 160 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 925fad8..3cf95d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,22 +2,34 @@ name = "tree-sitter-vimdoc" description = "Tree-sitter grammar for Vim help files" version = "4.0.2" +authors = ["Justin M. Keyes "] license = "Apache-2.0" -keywords = ["incremental", "parsing", "neovim", "vimdoc"] -categories = ["parsing", "text-editors"] +readme = "README.md" +keywords = ["incremental", "parsing", "tree-sitter", "vimdoc"] +categories = ["parser-implementations", "parsing", "text-editors"] repository = "https://github.com/neovim/tree-sitter-vimdoc" -authors = ["Thomas Vigouroux "] edition = "2021" autoexamples = false build = "bindings/rust/build.rs" -include = ["bindings/rust/*", "grammar.js", "queries/*", "src/*"] +include = [ + "bindings/rust/*", + "grammar.js", + "queries/*", + "src/*", + "tree-sitter.json", + "/LICENSE", +] [lib] path = "bindings/rust/lib.rs" [dependencies] -tree-sitter = ">=0.25.0" +tree-sitter = "0.25.10" +tree-sitter-language = "0.1" [build-dependencies] -cc = "^1.0.89" +cc = "1.2" + +[dev-dependencies] +tree-sitter = "0.25.10" diff --git a/Package.swift b/Package.swift index c039847..d2436ef 100644 --- a/Package.swift +++ b/Package.swift @@ -1,47 +1,41 @@ // swift-tools-version:5.3 + +import Foundation import PackageDescription +var sources = ["src/parser.c"] +if FileManager.default.fileExists(atPath: "src/scanner.c") { + sources.append("src/scanner.c") +} + let package = Package( name: "TreeSitterVimdoc", - platforms: [.macOS(.v10_13), .iOS(.v11)], products: [ .library(name: "TreeSitterVimdoc", targets: ["TreeSitterVimdoc"]), ], - dependencies: [], + dependencies: [ + .package(name: "SwiftTreeSitter", url: "https://github.com/tree-sitter/swift-tree-sitter", from: "0.9.0"), + ], targets: [ - .target(name: "TreeSitterVimdoc", - path: ".", - exclude: [ - "Cargo.toml", - "Makefile", - "binding.gyp", - "bindings/c", - "bindings/go", - "bindings/node", - "bindings/python", - "bindings/rust", - "prebuilds", - "node_modules", - "grammar.js", - "package.json", - "package-lock.json", - "pyproject.toml", - "setup.py", - "test", - "examples", - ".editorconfig", - ".github", - ".gitignore", - ".gitattributes", - ], - sources: [ - "src/parser.c", - ], - resources: [ - .copy("queries") - ], - publicHeadersPath: "bindings/swift", - cSettings: [.headerSearchPath("src")]) + .target( + name: "TreeSitterVimdoc", + dependencies: [], + path: ".", + sources: sources, + resources: [ + .copy("queries") + ], + publicHeadersPath: "bindings/swift", + cSettings: [.headerSearchPath("src")] + ), + .testTarget( + name: "TreeSitterVimdocTests", + dependencies: [ + "SwiftTreeSitter", + "TreeSitterVimdoc", + ], + path: "bindings/swift/TreeSitterVimdocTests" + ) ], cLanguageStandard: .c11 ) diff --git a/README.md b/README.md index 4f798cb..1ff65a2 100644 --- a/README.md +++ b/README.md @@ -93,3 +93,12 @@ Steps to perform a release: https://tree-sitter.github.io/tree-sitter/creating-p git push ``` 6. Tag and release: https://github.com/neovim/tree-sitter-vimdoc/releases/new + +### Publis to crates.io + +``` +cargo publish --dry-run +cargo login +cargo publish +``` + diff --git a/package-lock.json b/package-lock.json index d558174..6634309 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,18 +10,19 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "node-addon-api": "^7.1.0", - "node-gyp-build": "^4.8.0" + "node-addon-api": "^8.5.0", + "node-gyp-build": "^4.8.4" }, "devDependencies": { - "prebuildify": "^6.0.0", - "tree-sitter-cli": "^0.21.0" + "prebuildify": "^6.0.1", + "tree-sitter": "^0.22.4", + "tree-sitter-cli": "^0.25.10" }, "peerDependencies": { - "tree-sitter": "^0.21.0" + "tree-sitter": "^0.22.4" }, "peerDependenciesMeta": { - "tree_sitter": { + "tree-sitter": { "optional": true } } @@ -96,15 +97,6 @@ "once": "^1.4.0" } }, - "node_modules/execspawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", - "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==", - "dev": true, - "dependencies": { - "util-extend": "^1.0.1" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -177,17 +169,19 @@ } }, "node_modules/node-addon-api": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", - "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "license": "MIT", "engines": { - "node": "^16 || ^18 || >= 20" + "node": "^18 || ^20 || >= 21" } }, "node_modules/node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -225,12 +219,12 @@ } }, "node_modules/prebuildify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/prebuildify/-/prebuildify-6.0.0.tgz", - "integrity": "sha512-DEvK4C3tcimIp7Pzqbs036n9i6CTKGp1XVEpMnr4wV3enKU5sBogPP+lP3KZw7993i42bXnsd5eIxAXQ566Cqw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/prebuildify/-/prebuildify-6.0.1.tgz", + "integrity": "sha512-8Y2oOOateom/s8dNBsGIcnm6AxPmLH4/nanQzL5lQMU+sC0CMhzARZHizwr36pUPLdvBnOkCNQzxg4djuFSgIw==", "dev": true, + "license": "MIT", "dependencies": { - "execspawn": "^1.0.1", "minimist": "^1.2.5", "mkdirp-classic": "^0.5.3", "node-abi": "^3.3.0", @@ -339,24 +333,29 @@ } }, "node_modules/tree-sitter": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.0.tgz", - "integrity": "sha512-WDhpLxQdW7wsmmnBsf4NGqnEKs+Kxljk/CfbJJxgzZiinfA1gAWnhi/GirQjClw+woXhYsNq930BlskFulMMBQ==", + "version": "0.22.4", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.22.4.tgz", + "integrity": "sha512-usbHZP9/oxNsUY65MQUsduGRqDHQOou1cagUSwjhoSYAmSahjQDAVsh9s+SlZkn8X8+O1FULRGwHu7AFP3kjzg==", + "dev": true, "hasInstallScript": true, - "peer": true, + "license": "MIT", "dependencies": { - "node-addon-api": "^7.1.0", - "node-gyp-build": "^4.8.0" + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" } }, "node_modules/tree-sitter-cli": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.21.0.tgz", - "integrity": "sha512-wA7wT5724fNQW82XDH6zT6ZcYonjrAKLCHHuhLsPcAKULrhp3rNuMvlgBdB5FUBvmjHNhtTZF/qpHenMoRJPBw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.25.10.tgz", + "integrity": "sha512-KoebQguKMCIghisEOdA372TIbrUl0kdnfZ9YQIBRAeOvNSKe85XbU4LuFW7hduRUwJj0rAG7pX5wo9sZhbBF1g==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "tree-sitter": "cli.js" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/util-deprecate": { @@ -365,12 +364,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/util-extend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", - "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -427,15 +420,6 @@ "once": "^1.4.0" } }, - "execspawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", - "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==", - "dev": true, - "requires": { - "util-extend": "^1.0.1" - } - }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -485,14 +469,14 @@ } }, "node-addon-api": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", - "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==" + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==" }, "node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==" }, "npm-run-path": { "version": "3.1.0", @@ -519,12 +503,11 @@ "dev": true }, "prebuildify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/prebuildify/-/prebuildify-6.0.0.tgz", - "integrity": "sha512-DEvK4C3tcimIp7Pzqbs036n9i6CTKGp1XVEpMnr4wV3enKU5sBogPP+lP3KZw7993i42bXnsd5eIxAXQ566Cqw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/prebuildify/-/prebuildify-6.0.1.tgz", + "integrity": "sha512-8Y2oOOateom/s8dNBsGIcnm6AxPmLH4/nanQzL5lQMU+sC0CMhzARZHizwr36pUPLdvBnOkCNQzxg4djuFSgIw==", "dev": true, "requires": { - "execspawn": "^1.0.1", "minimist": "^1.2.5", "mkdirp-classic": "^0.5.3", "node-abi": "^3.3.0", @@ -604,19 +587,19 @@ } }, "tree-sitter": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.0.tgz", - "integrity": "sha512-WDhpLxQdW7wsmmnBsf4NGqnEKs+Kxljk/CfbJJxgzZiinfA1gAWnhi/GirQjClw+woXhYsNq930BlskFulMMBQ==", - "peer": true, + "version": "0.22.4", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.22.4.tgz", + "integrity": "sha512-usbHZP9/oxNsUY65MQUsduGRqDHQOou1cagUSwjhoSYAmSahjQDAVsh9s+SlZkn8X8+O1FULRGwHu7AFP3kjzg==", + "dev": true, "requires": { - "node-addon-api": "^7.1.0", - "node-gyp-build": "^4.8.0" + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" } }, "tree-sitter-cli": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.21.0.tgz", - "integrity": "sha512-wA7wT5724fNQW82XDH6zT6ZcYonjrAKLCHHuhLsPcAKULrhp3rNuMvlgBdB5FUBvmjHNhtTZF/qpHenMoRJPBw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.25.10.tgz", + "integrity": "sha512-KoebQguKMCIghisEOdA372TIbrUl0kdnfZ9YQIBRAeOvNSKe85XbU4LuFW7hduRUwJj0rAG7pX5wo9sZhbBF1g==", "dev": true }, "util-deprecate": { @@ -625,12 +608,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "util-extend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", - "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", - "dev": true - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 5205140..66a4f2a 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,16 @@ { "name": "tree-sitter-vimdoc", "version": "4.0.2", - "description": "Vim help file grammar for tree-sitter", - "repository": "github:neovim/tree-sitter-vimdoc", - "author": "Thomas Vigouroux ", + "description": "Tree-sitter grammar for Vim help files", + "repository": "https://github.com/neovim/tree-sitter-vimdoc", + "author": { + "name": "Justin M. Keyes", + "email": "justinkz@gmail.com" + }, + "contributors": [ + "Thomas Vigouroux ", + "Christian Clason " + ], "license": "Apache-2.0", "main": "bindings/node", "types": "bindings/node", @@ -18,40 +25,35 @@ ], "files": [ "grammar.js", + "tree-sitter.json", "binding.gyp", "prebuilds/**", "bindings/node/*", "queries/*", - "src/**" + "src/**", + "*.wasm" ], "dependencies": { - "node-addon-api": "^7.1.0", - "node-gyp-build": "^4.8.0" + "node-addon-api": "^8.5.0", + "node-gyp-build": "^4.8.4" }, "devDependencies": { - "tree-sitter-cli": "^0.21.0", - "prebuildify": "^6.0.0" + "prebuildify": "^6.0.1", + "tree-sitter": "^0.22.4", + "tree-sitter-cli": "^0.25.10" }, "peerDependencies": { - "tree-sitter": "^0.21.0" + "tree-sitter": "^0.22.4" }, "peerDependenciesMeta": { - "tree_sitter": { + "tree-sitter": { "optional": true } }, "scripts": { - "build": "tree-sitter generate --no-bindings", - "test": "tree-sitter test", "install": "node-gyp-build", - "prebuildify": "prebuildify --napi --strip" - }, - "tree-sitter": [ - { - "scope": "text.vimdoc", - "first-line-regex": "^\\*[\\w-]+\\.txt\\*", - "highlights": "queries/vimdoc/highlights.scm", - "injections": "queries/vimdoc/injections.scm" - } - ] + "prestart": "tree-sitter build --wasm", + "start": "tree-sitter playground", + "test": "node --test bindings/node/*_test.js" + } } diff --git a/pyproject.toml b/pyproject.toml index a97e555..2ab60e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools>=42", "wheel"] +requires = ["setuptools>=62.4.0", "wheel"] build-backend = "setuptools.build_meta" [project] @@ -9,24 +9,21 @@ version = "4.0.2" keywords = ["incremental", "parsing", "tree-sitter", "vimdoc"] classifiers = [ "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", "Topic :: Software Development :: Compilers", "Topic :: Text Processing :: Linguistic", - "Typing :: Typed" + "Typing :: Typed", ] -authors = [ - {name = "Thomas Vigouroux", email = "tomvig38@gmail.com"} -] -requires-python = ">=3.8" -license.text = "MIT" +authors = [{ name = "Justin M. Keyes", email = "justinkz@gmail.com" }] +requires-python = ">=3.10" +license.text = "Apache-2.0" readme = "README.md" [project.urls] Homepage = "https://github.com/neovim/tree-sitter-vimdoc" [project.optional-dependencies] -core = ["tree-sitter~=0.25"] +core = ["tree-sitter~=0.24"] [tool.cibuildwheel] -build = "cp38-*" +build = "cp310-*" build-frontend = "build" diff --git a/setup.py b/setup.py index 9592282..6be3155 100644 --- a/setup.py +++ b/setup.py @@ -1,27 +1,49 @@ -from os.path import isdir, join -from platform import system +from os import path +from sysconfig import get_config_var from setuptools import Extension, find_packages, setup from setuptools.command.build import build +from setuptools.command.build_ext import build_ext +from setuptools.command.egg_info import egg_info from wheel.bdist_wheel import bdist_wheel class Build(build): def run(self): - if isdir("queries"): - dest = join(self.build_lib, "tree_sitter_vimdoc", "queries") + if path.isdir("queries"): + dest = path.join(self.build_lib, "tree_sitter_vimdoc", "queries") self.copy_tree("queries", dest) super().run() +class BuildExt(build_ext): + def build_extension(self, ext: Extension): + if self.compiler.compiler_type != "msvc": + ext.extra_compile_args = ["-std=c11", "-fvisibility=hidden"] + else: + ext.extra_compile_args = ["/std:c11", "/utf-8"] + if path.exists("src/scanner.c"): + ext.sources.append("src/scanner.c") + if ext.py_limited_api: + ext.define_macros.append(("Py_LIMITED_API", "0x030A0000")) + super().build_extension(ext) + + class BdistWheel(bdist_wheel): def get_tag(self): python, abi, platform = super().get_tag() if python.startswith("cp"): - python, abi = "cp38", "abi3" + python, abi = "cp310", "abi3" return python, abi, platform +class EggInfo(egg_info): + def find_sources(self): + super().find_sources() + self.filelist.recursive_include("queries", "*.scm") + self.filelist.include("src/tree_sitter/*.h") + + setup( packages=find_packages("bindings/python"), package_dir={"": "bindings/python"}, @@ -37,20 +59,19 @@ def get_tag(self): "bindings/python/tree_sitter_vimdoc/binding.c", "src/parser.c", ], - extra_compile_args=( - ["-std=c11"] if system() != 'Windows' else [] - ), define_macros=[ - ("Py_LIMITED_API", "0x03080000"), - ("PY_SSIZE_T_CLEAN", None) + ("PY_SSIZE_T_CLEAN", None), + ("TREE_SITTER_HIDE_SYMBOLS", None), ], include_dirs=["src"], - py_limited_api=True, + py_limited_api=not get_config_var("Py_GIL_DISABLED"), ) ], cmdclass={ "build": Build, - "bdist_wheel": BdistWheel + "build_ext": BuildExt, + "bdist_wheel": BdistWheel, + "egg_info": EggInfo, }, zip_safe=False ) diff --git a/tree-sitter.json b/tree-sitter.json index 837b550..8e8f99d 100644 --- a/tree-sitter.json +++ b/tree-sitter.json @@ -17,6 +17,14 @@ "repository": "https://github.com/neovim/tree-sitter-vimdoc" }, "authors": [ + { + "name": "Justin M. Keyes", + "email": "justinkz@gmail.com" + }, + { + "name": "Christian Clason", + "email": "c.clason@uni-graz.at" + }, { "name": "Thomas Vigouroux", "email": "tomvig38@gmail.com"