mirror of
https://github.com/ast-grep/ast-grep.git
synced 2026-05-06 06:06:46 -04:00
fix: remove benches
seldomly used
This commit is contained in:
Generated
+1
-288
@@ -26,12 +26,6 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anes"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
|
||||
|
||||
[[package]]
|
||||
name = "ansi_term"
|
||||
version = "0.12.1"
|
||||
@@ -265,7 +259,7 @@ version = "0.2.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
dependencies = [
|
||||
"hermit-abi 0.1.19",
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
@@ -291,16 +285,6 @@ dependencies = [
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "benches"
|
||||
version = "0.38.1"
|
||||
dependencies = [
|
||||
"ast-grep-config",
|
||||
"ast-grep-core",
|
||||
"ast-grep-language",
|
||||
"criterion",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bit-set"
|
||||
version = "0.8.0"
|
||||
@@ -339,12 +323,6 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bumpalo"
|
||||
version = "3.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.5.0"
|
||||
@@ -357,12 +335,6 @@ version = "1.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
|
||||
|
||||
[[package]]
|
||||
name = "cast"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.2.19"
|
||||
@@ -378,33 +350,6 @@ version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "ciborium"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
|
||||
dependencies = [
|
||||
"ciborium-io",
|
||||
"ciborium-ll",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ciborium-io"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
|
||||
|
||||
[[package]]
|
||||
name = "ciborium-ll"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
|
||||
dependencies = [
|
||||
"ciborium-io",
|
||||
"half",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.38"
|
||||
@@ -489,42 +434,6 @@ dependencies = [
|
||||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "criterion"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
|
||||
dependencies = [
|
||||
"anes",
|
||||
"cast",
|
||||
"ciborium",
|
||||
"clap",
|
||||
"criterion-plot",
|
||||
"is-terminal",
|
||||
"itertools",
|
||||
"num-traits",
|
||||
"once_cell",
|
||||
"oorandom",
|
||||
"plotters",
|
||||
"rayon",
|
||||
"regex",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"tinytemplate",
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "criterion-plot"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
|
||||
dependencies = [
|
||||
"cast",
|
||||
"itertools",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.6"
|
||||
@@ -593,12 +502,6 @@ dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crunchy"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
|
||||
|
||||
[[package]]
|
||||
name = "ctor"
|
||||
version = "0.2.9"
|
||||
@@ -671,12 +574,6 @@ version = "1.0.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005"
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.2"
|
||||
@@ -843,16 +740,6 @@ dependencies = [
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "half"
|
||||
version = "2.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crunchy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.5"
|
||||
@@ -880,12 +767,6 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e"
|
||||
|
||||
[[package]]
|
||||
name = "httparse"
|
||||
version = "1.10.1"
|
||||
@@ -941,48 +822,18 @@ dependencies = [
|
||||
"unicode-width 0.1.14",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is-terminal"
|
||||
version = "0.4.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
|
||||
dependencies = [
|
||||
"hermit-abi 0.5.0",
|
||||
"libc",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is_terminal_polyfill"
|
||||
version = "1.70.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.10.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
||||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
||||
|
||||
[[package]]
|
||||
name = "js-sys"
|
||||
version = "0.3.77"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.172"
|
||||
@@ -1187,12 +1038,6 @@ version = "1.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
||||
|
||||
[[package]]
|
||||
name = "oorandom"
|
||||
version = "11.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.3"
|
||||
@@ -1228,34 +1073,6 @@ version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||
|
||||
[[package]]
|
||||
name = "plotters"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"plotters-backend",
|
||||
"plotters-svg",
|
||||
"wasm-bindgen",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "plotters-backend"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a"
|
||||
|
||||
[[package]]
|
||||
name = "plotters-svg"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670"
|
||||
dependencies = [
|
||||
"plotters-backend",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "portable-atomic"
|
||||
version = "1.11.0"
|
||||
@@ -1390,26 +1207,6 @@ version = "5.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
|
||||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
|
||||
dependencies = [
|
||||
"either",
|
||||
"rayon-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon-core"
|
||||
version = "1.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
|
||||
dependencies = [
|
||||
"crossbeam-deque",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.11"
|
||||
@@ -1467,12 +1264,6 @@ dependencies = [
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.20"
|
||||
@@ -1743,16 +1534,6 @@ dependencies = [
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tinytemplate"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.45.0"
|
||||
@@ -2194,74 +1975,6 @@ dependencies = [
|
||||
"wit-bindgen-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen"
|
||||
version = "0.2.100"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"once_cell",
|
||||
"rustversion",
|
||||
"wasm-bindgen-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-backend"
|
||||
version = "0.2.100"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"log",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro"
|
||||
version = "0.2.100"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"wasm-bindgen-macro-support",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro-support"
|
||||
version = "0.2.100"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-shared"
|
||||
version = "0.2.100"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "web-sys"
|
||||
version = "0.3.77"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
|
||||
+1
-2
@@ -1,8 +1,7 @@
|
||||
[workspace]
|
||||
members = [
|
||||
"crates/*",
|
||||
"xtask",
|
||||
"benches"
|
||||
"xtask"
|
||||
]
|
||||
default-members = ["crates/*"]
|
||||
resolver = "2"
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
semi: false
|
||||
singleQuote: true
|
||||
@@ -1,20 +0,0 @@
|
||||
[package]
|
||||
publish = false
|
||||
name = "benches"
|
||||
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
version.workspace = true
|
||||
|
||||
[dependencies]
|
||||
ast-grep-core.workspace = true
|
||||
ast-grep-config.workspace = true
|
||||
ast-grep-language.workspace = true
|
||||
|
||||
[dev-dependencies]
|
||||
criterion = "0.5.1"
|
||||
|
||||
[[bench]]
|
||||
name = "sg"
|
||||
path = "src/sg_benchmark.rs"
|
||||
harness = false
|
||||
@@ -1,128 +0,0 @@
|
||||
import b from 'benny'
|
||||
import fs from 'fs'
|
||||
|
||||
import { ts as sg } from '@ast-grep/napi'
|
||||
import * as babel from '@babel/core'
|
||||
import oxc from '@oxidation-compiler/napi'
|
||||
import * as swc from '@swc/core'
|
||||
import * as ts from 'typescript'
|
||||
import Parser from 'tree-sitter'
|
||||
// because tree-sitter-typescript does not have d.ts
|
||||
const tresSitterTS = require('tree-sitter-typescript').typescript
|
||||
|
||||
const treeSitter = new Parser()
|
||||
treeSitter.setLanguage(tresSitterTS)
|
||||
|
||||
function prepareCases() {
|
||||
const tsEntry = fs.readFileSync('./fixtures/tsc.ts.fixture', 'utf8')
|
||||
const vueRef = fs.readFileSync('./fixtures/ref.ts.fixture', 'utf8')
|
||||
const tsChecker = fs.readFileSync('./fixtures/checker.ts.fixture', 'utf8')
|
||||
return [
|
||||
['Parse One Line', 'let a = 123'],
|
||||
['Parse Small File', tsEntry],
|
||||
['Parse Medium File', vueRef],
|
||||
['Parse Huge File', tsChecker],
|
||||
]
|
||||
}
|
||||
|
||||
const CONCURRENCY = 5
|
||||
function concurrent(f: () => unknown) {
|
||||
return () => {
|
||||
const tasks = Array(CONCURRENCY).fill(undefined).map(() => f())
|
||||
return Promise.all(tasks)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function parseSyncBench(source: string) {
|
||||
const tasks = {
|
||||
'ast-grep sync parse': () => {
|
||||
sg.parse(source)
|
||||
},
|
||||
'tree-sitter sync parse': () => {
|
||||
treeSitter.parse(source)
|
||||
},
|
||||
'babel sync parse': () => {
|
||||
babel.parseSync(source, {
|
||||
plugins: ['@babel/plugin-syntax-typescript'],
|
||||
sourceType: 'module',
|
||||
})
|
||||
},
|
||||
'oxc sync parse': () => {
|
||||
JSON.parse(
|
||||
oxc.parseSync(source, {
|
||||
sourceType: 'module',
|
||||
sourceFilename: 'test.ts',
|
||||
}).program,
|
||||
)
|
||||
},
|
||||
'swc sync parse': () => {
|
||||
swc.parseSync(source, {
|
||||
syntax: 'typescript',
|
||||
})
|
||||
},
|
||||
'TypeScript sync parse': () => {
|
||||
ts.createSourceFile('benchmark.ts', source, ts.ScriptTarget.Latest)
|
||||
},
|
||||
}
|
||||
const newTasks = Object.entries(tasks).map(([n, f]) => [n, concurrent(f)])
|
||||
return Object.fromEntries(newTasks)
|
||||
}
|
||||
|
||||
function parseAsyncBench(source: string) {
|
||||
const tasks = {
|
||||
'ast-grep async parse': () => sg.parseAsync(source),
|
||||
'tree-sitter parse(not async)': async () => {
|
||||
treeSitter.parse(source)
|
||||
},
|
||||
'babel async parse': () =>
|
||||
babel.parseAsync(source, {
|
||||
plugins: ['@babel/plugin-syntax-typescript'],
|
||||
sourceType: 'module',
|
||||
}),
|
||||
'oxc async parse': async () => {
|
||||
const src = await oxc.parseAsync(source, {
|
||||
sourceType: 'module',
|
||||
sourceFilename: 'test.ts',
|
||||
})
|
||||
JSON.parse(src.program)
|
||||
},
|
||||
'swc async parse': () =>
|
||||
swc.parse(source, {
|
||||
syntax: 'typescript',
|
||||
}),
|
||||
'TypeScript parse(not async)': async () => {
|
||||
ts.createSourceFile('benchmark.ts', source, ts.ScriptTarget.Latest)
|
||||
},
|
||||
}
|
||||
|
||||
const newTasks = Object.entries(tasks).map(([n, f]) => [n, concurrent(f)])
|
||||
return Object.fromEntries(newTasks)
|
||||
}
|
||||
|
||||
async function run(benchGenerator: (s: string) => Record<string, () => unknown>) {
|
||||
const cases = prepareCases()
|
||||
for (const [title, source] of cases) {
|
||||
const benches = benchGenerator(source)
|
||||
await b.suite(
|
||||
`${benchGenerator.name}: ${title}`,
|
||||
...Object.entries(benches).map(([runnerName, runner]) =>
|
||||
b.add(runnerName, runner),
|
||||
),
|
||||
b.cycle(),
|
||||
b.complete(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
async function benchmark() {
|
||||
await run(parseSyncBench).catch((e) => {
|
||||
console.error(e)
|
||||
})
|
||||
|
||||
await run(parseAsyncBench).catch((e) => {
|
||||
console.error(e)
|
||||
})
|
||||
}
|
||||
|
||||
benchmark()
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,504 +0,0 @@
|
||||
import {
|
||||
activeEffect,
|
||||
getDepFromReactive,
|
||||
shouldTrack,
|
||||
trackEffects,
|
||||
triggerEffects
|
||||
} from './effect'
|
||||
import { TrackOpTypes, TriggerOpTypes } from './operations'
|
||||
import { isArray, hasChanged, IfAny, isFunction, isObject } from '@vue/shared'
|
||||
import {
|
||||
isProxy,
|
||||
toRaw,
|
||||
isReactive,
|
||||
toReactive,
|
||||
isReadonly,
|
||||
isShallow
|
||||
} from './reactive'
|
||||
import type { ShallowReactiveMarker } from './reactive'
|
||||
import { CollectionTypes } from './collectionHandlers'
|
||||
import { createDep, Dep } from './dep'
|
||||
|
||||
declare const RefSymbol: unique symbol
|
||||
export declare const RawSymbol: unique symbol
|
||||
|
||||
export interface Ref<T = any> {
|
||||
value: T
|
||||
/**
|
||||
* Type differentiator only.
|
||||
* We need this to be in public d.ts but don't want it to show up in IDE
|
||||
* autocomplete, so we use a private Symbol instead.
|
||||
*/
|
||||
[RefSymbol]: true
|
||||
}
|
||||
|
||||
type RefBase<T> = {
|
||||
dep?: Dep
|
||||
value: T
|
||||
}
|
||||
|
||||
export function trackRefValue(ref: RefBase<any>) {
|
||||
if (shouldTrack && activeEffect) {
|
||||
ref = toRaw(ref)
|
||||
if (__DEV__) {
|
||||
trackEffects(ref.dep || (ref.dep = createDep()), {
|
||||
target: ref,
|
||||
type: TrackOpTypes.GET,
|
||||
key: 'value'
|
||||
})
|
||||
} else {
|
||||
trackEffects(ref.dep || (ref.dep = createDep()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function triggerRefValue(ref: RefBase<any>, newVal?: any) {
|
||||
ref = toRaw(ref)
|
||||
const dep = ref.dep
|
||||
if (dep) {
|
||||
if (__DEV__) {
|
||||
triggerEffects(dep, {
|
||||
target: ref,
|
||||
type: TriggerOpTypes.SET,
|
||||
key: 'value',
|
||||
newValue: newVal
|
||||
})
|
||||
} else {
|
||||
triggerEffects(dep)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a value is a ref object.
|
||||
*
|
||||
* @param r - The value to inspect.
|
||||
* @see {@link https://vuejs.org/api/reactivity-utilities.html#isref}
|
||||
*/
|
||||
export function isRef<T>(r: Ref<T> | unknown): r is Ref<T>
|
||||
export function isRef(r: any): r is Ref {
|
||||
return !!(r && r.__v_isRef === true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Takes an inner value and returns a reactive and mutable ref object, which
|
||||
* has a single property `.value` that points to the inner value.
|
||||
*
|
||||
* @param value - The object to wrap in the ref.
|
||||
* @see {@link https://vuejs.org/api/reactivity-core.html#ref}
|
||||
*/
|
||||
export function ref<T extends Ref>(value: T): T
|
||||
export function ref<T>(value: T): Ref<UnwrapRef<T>>
|
||||
export function ref<T = any>(): Ref<T | undefined>
|
||||
export function ref(value?: unknown) {
|
||||
return createRef(value, false)
|
||||
}
|
||||
|
||||
declare const ShallowRefMarker: unique symbol
|
||||
|
||||
export type ShallowRef<T = any> = Ref<T> & { [ShallowRefMarker]?: true }
|
||||
|
||||
/**
|
||||
* Shallow version of {@link ref()}.
|
||||
*
|
||||
* @example
|
||||
* ```js
|
||||
* const state = shallowRef({ count: 1 })
|
||||
*
|
||||
* // does NOT trigger change
|
||||
* state.value.count = 2
|
||||
*
|
||||
* // does trigger change
|
||||
* state.value = { count: 2 }
|
||||
* ```
|
||||
*
|
||||
* @param value - The "inner value" for the shallow ref.
|
||||
* @see {@link https://vuejs.org/api/reactivity-advanced.html#shallowref}
|
||||
*/
|
||||
export function shallowRef<T extends object>(
|
||||
value: T
|
||||
): T extends Ref ? T : ShallowRef<T>
|
||||
export function shallowRef<T>(value: T): ShallowRef<T>
|
||||
export function shallowRef<T = any>(): ShallowRef<T | undefined>
|
||||
export function shallowRef(value?: unknown) {
|
||||
return createRef(value, true)
|
||||
}
|
||||
|
||||
function createRef(rawValue: unknown, shallow: boolean) {
|
||||
if (isRef(rawValue)) {
|
||||
return rawValue
|
||||
}
|
||||
return new RefImpl(rawValue, shallow)
|
||||
}
|
||||
|
||||
class RefImpl<T> {
|
||||
private _value: T
|
||||
private _rawValue: T
|
||||
|
||||
public dep?: Dep = undefined
|
||||
public readonly __v_isRef = true
|
||||
|
||||
constructor(value: T, public readonly __v_isShallow: boolean) {
|
||||
this._rawValue = __v_isShallow ? value : toRaw(value)
|
||||
this._value = __v_isShallow ? value : toReactive(value)
|
||||
}
|
||||
|
||||
get value() {
|
||||
trackRefValue(this)
|
||||
return this._value
|
||||
}
|
||||
|
||||
set value(newVal) {
|
||||
const useDirectValue =
|
||||
this.__v_isShallow || isShallow(newVal) || isReadonly(newVal)
|
||||
newVal = useDirectValue ? newVal : toRaw(newVal)
|
||||
if (hasChanged(newVal, this._rawValue)) {
|
||||
this._rawValue = newVal
|
||||
this._value = useDirectValue ? newVal : toReactive(newVal)
|
||||
triggerRefValue(this, newVal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Force trigger effects that depends on a shallow ref. This is typically used
|
||||
* after making deep mutations to the inner value of a shallow ref.
|
||||
*
|
||||
* @example
|
||||
* ```js
|
||||
* const shallow = shallowRef({
|
||||
* greet: 'Hello, world'
|
||||
* })
|
||||
*
|
||||
* // Logs "Hello, world" once for the first run-through
|
||||
* watchEffect(() => {
|
||||
* console.log(shallow.value.greet)
|
||||
* })
|
||||
*
|
||||
* // This won't trigger the effect because the ref is shallow
|
||||
* shallow.value.greet = 'Hello, universe'
|
||||
*
|
||||
* // Logs "Hello, universe"
|
||||
* triggerRef(shallow)
|
||||
* ```
|
||||
*
|
||||
* @param ref - The ref whose tied effects shall be executed.
|
||||
* @see {@link https://vuejs.org/api/reactivity-advanced.html#triggerref}
|
||||
*/
|
||||
export function triggerRef(ref: Ref) {
|
||||
triggerRefValue(ref, __DEV__ ? ref.value : void 0)
|
||||
}
|
||||
|
||||
export type MaybeRef<T = any> = T | Ref<T>
|
||||
export type MaybeRefOrGetter<T = any> = MaybeRef<T> | (() => T)
|
||||
|
||||
/**
|
||||
* Returns the inner value if the argument is a ref, otherwise return the
|
||||
* argument itself. This is a sugar function for
|
||||
* `val = isRef(val) ? val.value : val`.
|
||||
*
|
||||
* @example
|
||||
* ```js
|
||||
* function useFoo(x: number | Ref<number>) {
|
||||
* const unwrapped = unref(x)
|
||||
* // unwrapped is guaranteed to be number now
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @param ref - Ref or plain value to be converted into the plain value.
|
||||
* @see {@link https://vuejs.org/api/reactivity-utilities.html#unref}
|
||||
*/
|
||||
export function unref<T>(ref: MaybeRef<T>): T {
|
||||
return isRef(ref) ? (ref.value as any) : ref
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes values / refs / getters to values.
|
||||
* This is similar to {@link unref()}, except that it also normalizes getters.
|
||||
* If the argument is a getter, it will be invoked and its return value will
|
||||
* be returned.
|
||||
*
|
||||
* @example
|
||||
* ```js
|
||||
* toValue(1) // 1
|
||||
* toValue(ref(1)) // 1
|
||||
* toValue(() => 1) // 1
|
||||
* ```
|
||||
*
|
||||
* @param source - A getter, an existing ref, or a non-function value.
|
||||
* @see {@link https://vuejs.org/api/reactivity-utilities.html#tovalue}
|
||||
*/
|
||||
export function toValue<T>(source: MaybeRefOrGetter<T>): T {
|
||||
return isFunction(source) ? source() : unref(source)
|
||||
}
|
||||
|
||||
const shallowUnwrapHandlers: ProxyHandler<any> = {
|
||||
get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
|
||||
set: (target, key, value, receiver) => {
|
||||
const oldValue = target[key]
|
||||
if (isRef(oldValue) && !isRef(value)) {
|
||||
oldValue.value = value
|
||||
return true
|
||||
} else {
|
||||
return Reflect.set(target, key, value, receiver)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a reactive proxy for the given object.
|
||||
*
|
||||
* If the object already is reactive, it's returned as-is. If not, a new
|
||||
* reactive proxy is created. Direct child properties that are refs are properly
|
||||
* handled, as well.
|
||||
*
|
||||
* @param objectWithRefs - Either an already-reactive object or a simple object
|
||||
* that contains refs.
|
||||
*/
|
||||
export function proxyRefs<T extends object>(
|
||||
objectWithRefs: T
|
||||
): ShallowUnwrapRef<T> {
|
||||
return isReactive(objectWithRefs)
|
||||
? objectWithRefs
|
||||
: new Proxy(objectWithRefs, shallowUnwrapHandlers)
|
||||
}
|
||||
|
||||
export type CustomRefFactory<T> = (
|
||||
track: () => void,
|
||||
trigger: () => void
|
||||
) => {
|
||||
get: () => T
|
||||
set: (value: T) => void
|
||||
}
|
||||
|
||||
class CustomRefImpl<T> {
|
||||
public dep?: Dep = undefined
|
||||
|
||||
private readonly _get: ReturnType<CustomRefFactory<T>>['get']
|
||||
private readonly _set: ReturnType<CustomRefFactory<T>>['set']
|
||||
|
||||
public readonly __v_isRef = true
|
||||
|
||||
constructor(factory: CustomRefFactory<T>) {
|
||||
const { get, set } = factory(
|
||||
() => trackRefValue(this),
|
||||
() => triggerRefValue(this)
|
||||
)
|
||||
this._get = get
|
||||
this._set = set
|
||||
}
|
||||
|
||||
get value() {
|
||||
return this._get()
|
||||
}
|
||||
|
||||
set value(newVal) {
|
||||
this._set(newVal)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a customized ref with explicit control over its dependency tracking
|
||||
* and updates triggering.
|
||||
*
|
||||
* @param factory - The function that receives the `track` and `trigger` callbacks.
|
||||
* @see {@link https://vuejs.org/api/reactivity-advanced.html#customref}
|
||||
*/
|
||||
export function customRef<T>(factory: CustomRefFactory<T>): Ref<T> {
|
||||
return new CustomRefImpl(factory) as any
|
||||
}
|
||||
|
||||
export type ToRefs<T = any> = {
|
||||
[K in keyof T]: ToRef<T[K]>
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a reactive object to a plain object where each property of the
|
||||
* resulting object is a ref pointing to the corresponding property of the
|
||||
* original object. Each individual ref is created using {@link toRef()}.
|
||||
*
|
||||
* @param object - Reactive object to be made into an object of linked refs.
|
||||
* @see {@link https://vuejs.org/api/reactivity-utilities.html#torefs}
|
||||
*/
|
||||
export function toRefs<T extends object>(object: T): ToRefs<T> {
|
||||
if (__DEV__ && !isProxy(object)) {
|
||||
console.warn(`toRefs() expects a reactive object but received a plain one.`)
|
||||
}
|
||||
const ret: any = isArray(object) ? new Array(object.length) : {}
|
||||
for (const key in object) {
|
||||
ret[key] = propertyToRef(object, key)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
class ObjectRefImpl<T extends object, K extends keyof T> {
|
||||
public readonly __v_isRef = true
|
||||
|
||||
constructor(
|
||||
private readonly _object: T,
|
||||
private readonly _key: K,
|
||||
private readonly _defaultValue?: T[K]
|
||||
) {}
|
||||
|
||||
get value() {
|
||||
const val = this._object[this._key]
|
||||
return val === undefined ? (this._defaultValue as T[K]) : val
|
||||
}
|
||||
|
||||
set value(newVal) {
|
||||
this._object[this._key] = newVal
|
||||
}
|
||||
|
||||
get dep(): Dep | undefined {
|
||||
return getDepFromReactive(toRaw(this._object), this._key)
|
||||
}
|
||||
}
|
||||
|
||||
class GetterRefImpl<T> {
|
||||
public readonly __v_isRef = true
|
||||
public readonly __v_isReadonly = true
|
||||
constructor(private readonly _getter: () => T) {}
|
||||
get value() {
|
||||
return this._getter()
|
||||
}
|
||||
}
|
||||
|
||||
export type ToRef<T> = IfAny<T, Ref<T>, [T] extends [Ref] ? T : Ref<T>>
|
||||
|
||||
/**
|
||||
* Used to normalize values / refs / getters into refs.
|
||||
*
|
||||
* @example
|
||||
* ```js
|
||||
* // returns existing refs as-is
|
||||
* toRef(existingRef)
|
||||
*
|
||||
* // creates a ref that calls the getter on .value access
|
||||
* toRef(() => props.foo)
|
||||
*
|
||||
* // creates normal refs from non-function values
|
||||
* // equivalent to ref(1)
|
||||
* toRef(1)
|
||||
* ```
|
||||
*
|
||||
* Can also be used to create a ref for a property on a source reactive object.
|
||||
* The created ref is synced with its source property: mutating the source
|
||||
* property will update the ref, and vice-versa.
|
||||
*
|
||||
* @example
|
||||
* ```js
|
||||
* const state = reactive({
|
||||
* foo: 1,
|
||||
* bar: 2
|
||||
* })
|
||||
*
|
||||
* const fooRef = toRef(state, 'foo')
|
||||
*
|
||||
* // mutating the ref updates the original
|
||||
* fooRef.value++
|
||||
* console.log(state.foo) // 2
|
||||
*
|
||||
* // mutating the original also updates the ref
|
||||
* state.foo++
|
||||
* console.log(fooRef.value) // 3
|
||||
* ```
|
||||
*
|
||||
* @param source - A getter, an existing ref, a non-function value, or a
|
||||
* reactive object to create a property ref from.
|
||||
* @param [key] - (optional) Name of the property in the reactive object.
|
||||
* @see {@link https://vuejs.org/api/reactivity-utilities.html#toref}
|
||||
*/
|
||||
export function toRef<T>(
|
||||
value: T
|
||||
): T extends () => infer R
|
||||
? Readonly<Ref<R>>
|
||||
: T extends Ref
|
||||
? T
|
||||
: Ref<UnwrapRef<T>>
|
||||
export function toRef<T extends object, K extends keyof T>(
|
||||
object: T,
|
||||
key: K
|
||||
): ToRef<T[K]>
|
||||
export function toRef<T extends object, K extends keyof T>(
|
||||
object: T,
|
||||
key: K,
|
||||
defaultValue: T[K]
|
||||
): ToRef<Exclude<T[K], undefined>>
|
||||
export function toRef(
|
||||
source: Record<string, any> | MaybeRef,
|
||||
key?: string,
|
||||
defaultValue?: unknown
|
||||
): Ref {
|
||||
if (isRef(source)) {
|
||||
return source
|
||||
} else if (isFunction(source)) {
|
||||
return new GetterRefImpl(source as () => unknown) as any
|
||||
} else if (isObject(source) && arguments.length > 1) {
|
||||
return propertyToRef(source, key!, defaultValue)
|
||||
} else {
|
||||
return ref(source)
|
||||
}
|
||||
}
|
||||
|
||||
function propertyToRef(source: object, key: string, defaultValue?: unknown) {
|
||||
const val = (source as any)[key]
|
||||
return isRef(val)
|
||||
? val
|
||||
: (new ObjectRefImpl(
|
||||
source as Record<string, any>,
|
||||
key,
|
||||
defaultValue
|
||||
) as any)
|
||||
}
|
||||
|
||||
// corner case when use narrows type
|
||||
// Ex. type RelativePath = string & { __brand: unknown }
|
||||
// RelativePath extends object -> true
|
||||
type BaseTypes = string | number | boolean
|
||||
|
||||
/**
|
||||
* This is a special exported interface for other packages to declare
|
||||
* additional types that should bail out for ref unwrapping. For example
|
||||
* \@vue/runtime-dom can declare it like so in its d.ts:
|
||||
*
|
||||
* ``` ts
|
||||
* declare module '@vue/reactivity' {
|
||||
* export interface RefUnwrapBailTypes {
|
||||
* runtimeDOMBailTypes: Node | Window
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
export interface RefUnwrapBailTypes {}
|
||||
|
||||
export type ShallowUnwrapRef<T> = {
|
||||
[K in keyof T]: T[K] extends Ref<infer V>
|
||||
? V // if `V` is `unknown` that means it does not extend `Ref` and is undefined
|
||||
: T[K] extends Ref<infer V> | undefined
|
||||
? unknown extends V
|
||||
? undefined
|
||||
: V | undefined
|
||||
: T[K]
|
||||
}
|
||||
|
||||
export type UnwrapRef<T> = T extends ShallowRef<infer V>
|
||||
? V
|
||||
: T extends Ref<infer V>
|
||||
? UnwrapRefSimple<V>
|
||||
: UnwrapRefSimple<T>
|
||||
|
||||
export type UnwrapRefSimple<T> = T extends
|
||||
| Function
|
||||
| CollectionTypes
|
||||
| BaseTypes
|
||||
| Ref
|
||||
| RefUnwrapBailTypes[keyof RefUnwrapBailTypes]
|
||||
| { [RawSymbol]?: true }
|
||||
? T
|
||||
: T extends ReadonlyArray<any>
|
||||
? { [K in keyof T]: UnwrapRefSimple<T[K]> }
|
||||
: T extends object & { [ShallowReactiveMarker]?: never }
|
||||
? {
|
||||
[P in keyof T]: P extends symbol ? T[P] : UnwrapRef<T[P]>
|
||||
}
|
||||
: T
|
||||
@@ -1,8 +0,0 @@
|
||||
id: test-rule
|
||||
message: Add your rule message here....
|
||||
severity: error
|
||||
language: TypeScript
|
||||
rule:
|
||||
pattern: if ($$$) { $$$ }
|
||||
has:
|
||||
pattern: return $$$
|
||||
@@ -1,24 +0,0 @@
|
||||
import * as ts from "./_namespaces/ts";
|
||||
|
||||
// This file actually uses arguments passed on commandline and executes it
|
||||
|
||||
// enable deprecation logging
|
||||
ts.Debug.loggingHost = {
|
||||
log(_level, s) {
|
||||
ts.sys.write(`${s || ""}${ts.sys.newLine}`);
|
||||
}
|
||||
};
|
||||
|
||||
if (ts.Debug.isDebugging) {
|
||||
ts.Debug.enableDebugInfo();
|
||||
}
|
||||
|
||||
if (ts.sys.tryEnableSourceMapsForHost && /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))) {
|
||||
ts.sys.tryEnableSourceMapsForHost();
|
||||
}
|
||||
|
||||
if (ts.sys.setBlocking) {
|
||||
ts.sys.setBlocking();
|
||||
}
|
||||
|
||||
ts.executeCommandLine(ts.sys, ts.noop, ts.sys.args);
|
||||
@@ -1,30 +0,0 @@
|
||||
{
|
||||
"name": "benches",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"bench": "node -r ts-node/register bench.ts",
|
||||
"fmt": "prettier --write ."
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@ast-grep/napi": "link:../crates/napi",
|
||||
"@babel/core": "7.27.1",
|
||||
"@babel/plugin-syntax-typescript": "7.27.1",
|
||||
"@oxidation-compiler/napi": "0.2.0",
|
||||
"@swc/core": "1.11.24",
|
||||
"benny": "3.7.1",
|
||||
"tree-sitter": "0.22.4",
|
||||
"tree-sitter-typescript": "0.21.2",
|
||||
"typescript": "5.8.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/babel__core": "7.20.5",
|
||||
"@types/node": "22.15.17",
|
||||
"prettier": "3.5.3",
|
||||
"ts-node": "10.9.2"
|
||||
}
|
||||
}
|
||||
Generated
-1014
File diff suppressed because it is too large
Load Diff
@@ -1,62 +0,0 @@
|
||||
use ast_grep_config::{from_yaml_string, RuleConfig};
|
||||
use ast_grep_core::tree_sitter::{LanguageExt, StrDoc};
|
||||
use ast_grep_core::{AstGrep, Matcher, Pattern};
|
||||
use ast_grep_language::SupportLang;
|
||||
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||||
use std::env::current_dir;
|
||||
use std::fs::read_to_string;
|
||||
|
||||
fn read_rule() -> RuleConfig<SupportLang> {
|
||||
let cwd = current_dir().unwrap();
|
||||
let ts_file = cwd.join("fixtures/rules/has-rule.yml");
|
||||
let rule = read_to_string(ts_file).unwrap();
|
||||
let mut rules = from_yaml_string(&rule, &Default::default()).unwrap();
|
||||
rules.pop().unwrap()
|
||||
}
|
||||
|
||||
fn find_pattern<M: Matcher>(sg: &AstGrep<StrDoc<SupportLang>>, pattern: &M) {
|
||||
sg.root().find_all(pattern).for_each(drop);
|
||||
}
|
||||
|
||||
fn get_sg(path: &str) -> AstGrep<StrDoc<SupportLang>> {
|
||||
let lang = SupportLang::TypeScript;
|
||||
let cwd = current_dir().unwrap();
|
||||
let ts_file = cwd.join(path);
|
||||
let checker_source = read_to_string(ts_file).unwrap();
|
||||
lang.ast_grep(checker_source)
|
||||
}
|
||||
|
||||
fn find_all_bench(c: &mut Criterion) {
|
||||
let lang = SupportLang::TypeScript;
|
||||
let pattern = Pattern::new(black_box("$A && $A()"), lang);
|
||||
let checker_sg = get_sg("fixtures/checker.ts.fixture");
|
||||
let tsc_sg = get_sg("fixtures/tsc.ts.fixture");
|
||||
let ref_sg = get_sg("fixtures/ref.ts.fixture");
|
||||
c.bench_function("large file(checker.ts)", |b| {
|
||||
b.iter(|| find_pattern(&checker_sg, &pattern))
|
||||
});
|
||||
c.bench_function("medium file(ref.ts)", |b| {
|
||||
b.iter(|| find_pattern(&ref_sg, &pattern))
|
||||
});
|
||||
c.bench_function("small file(tsc.ts)", |b| {
|
||||
b.iter(|| find_pattern(&tsc_sg, &pattern))
|
||||
});
|
||||
}
|
||||
|
||||
fn rule_bench(c: &mut Criterion) {
|
||||
let ref_sg = get_sg("fixtures/ref.ts.fixture");
|
||||
let rule = read_rule();
|
||||
c.bench_function("test has rule", |b| {
|
||||
b.iter(|| find_pattern(&ref_sg, &rule.matcher))
|
||||
});
|
||||
}
|
||||
|
||||
fn build_pattern_bench(c: &mut Criterion) {
|
||||
let lang = SupportLang::TypeScript;
|
||||
c.bench_function("Build Normal Pattern", |b| {
|
||||
b.iter(|| Pattern::new(black_box("function $FUNC($$$ARGS) { $$$BODY }"), lang))
|
||||
});
|
||||
}
|
||||
|
||||
criterion_group!(benches, find_all_bench, rule_bench, build_pattern_bench);
|
||||
criterion_main!(benches);
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2018",
|
||||
"strict": true,
|
||||
"moduleResolution": "node",
|
||||
"module": "CommonJS",
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true
|
||||
},
|
||||
"include": ["."],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
@@ -281,9 +281,9 @@ mod test {
|
||||
// apple silicon macos and linux x86_64
|
||||
fn get_tree_sitter_path() -> &'static str {
|
||||
if cfg!(all(target_os = "macos", target_arch = "aarch64")) {
|
||||
"../../benches/fixtures/json-mac.so"
|
||||
"../../fixtures/json-mac.so"
|
||||
} else if cfg!(all(target_os = "linux", target_arch = "x86_64")) {
|
||||
"../../benches/fixtures/json-linux.so"
|
||||
"../../fixtures/json-linux.so"
|
||||
} else {
|
||||
""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user