ast-grep-cli 0.25.2__tar.gz → 0.25.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/Cargo.lock +41 -30
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/Cargo.toml +7 -7
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/PKG-INFO +1 -1
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/config.rs +5 -1
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/error.rs +7 -1
- ast_grep_cli-0.25.4/crates/cli/src/lang/injection.rs +244 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/lang.rs +9 -9
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/new.rs +3 -2
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/utils.rs +9 -1
- ast_grep_cli-0.25.4/crates/cli/src/verify/find_file.rs +212 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/verify/mod.rs +3 -9
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/combined.rs +2 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/dynamic/src/lib.rs +1 -1
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/Cargo.toml +2 -1
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/lib.rs +7 -2
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/parsers.rs +4 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/pyproject.toml +1 -1
- ast_grep_cli-0.25.2/crates/cli/src/verify/find_file.rs +0 -118
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/LICENSE +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/README.md +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/Cargo.toml +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/bin/ast-grep.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/completions.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/debug.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/lang/custom_lang.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/lang/lang_globs.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/lib.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/lsp.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/main.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/print/cloud_print.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/print/colored_print/test.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/print/colored_print.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/print/interactive_print.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/print/json_print.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/print/mod.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/run.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/scan.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/verify/case_result.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/verify/reporter.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/verify/snapshot.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/src/verify/test_case.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/tests/common/mod.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/tests/run_test.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/tests/scan_test.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/cli/tests/verify_test.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/Cargo.toml +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/check_var.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/fixer.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/lib.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/maybe.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule/deserialize_env.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule/mod.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule/nth_child.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule/referent_rule.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule/relational_rule.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule/stop_by.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule_collection.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule_config.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/rule_core.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/transform/mod.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/transform/rewrite.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/transform/string_case.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/config/src/transform/transformation.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/Cargo.toml +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/language.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/lib.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/match_tree/match_node.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/match_tree/mod.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/match_tree/strictness.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/matcher/kind.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/matcher/node_match.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/matcher/pattern.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/matcher/text.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/matcher.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/meta_var.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/node.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/ops.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/pinned.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/replacer/indent.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/replacer/structural.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/replacer/template.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/replacer.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/source.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/core/src/traversal.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/dynamic/Cargo.toml +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/bash.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/cpp.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/csharp.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/css.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/elixir.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/go.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/haskell.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/html.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/json.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/kotlin.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/lua.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/php.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/python.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/ruby.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/rust.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/scala.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/language/src/swift.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/lsp/Cargo.toml +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/lsp/src/lib.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/lsp/src/utils.rs +0 -0
- {ast_grep_cli-0.25.2 → ast_grep_cli-0.25.4}/crates/lsp/tests/basic.rs +0 -0
|
@@ -113,7 +113,7 @@ dependencies = [
|
|
|
113
113
|
|
|
114
114
|
[[package]]
|
|
115
115
|
name = "ast-grep"
|
|
116
|
-
version = "0.25.
|
|
116
|
+
version = "0.25.4"
|
|
117
117
|
dependencies = [
|
|
118
118
|
"ansi_term",
|
|
119
119
|
"anyhow",
|
|
@@ -145,7 +145,7 @@ dependencies = [
|
|
|
145
145
|
|
|
146
146
|
[[package]]
|
|
147
147
|
name = "ast-grep-config"
|
|
148
|
-
version = "0.25.
|
|
148
|
+
version = "0.25.4"
|
|
149
149
|
dependencies = [
|
|
150
150
|
"anyhow",
|
|
151
151
|
"ast-grep-core",
|
|
@@ -161,7 +161,7 @@ dependencies = [
|
|
|
161
161
|
|
|
162
162
|
[[package]]
|
|
163
163
|
name = "ast-grep-core"
|
|
164
|
-
version = "0.25.
|
|
164
|
+
version = "0.25.4"
|
|
165
165
|
dependencies = [
|
|
166
166
|
"bit-set",
|
|
167
167
|
"regex",
|
|
@@ -172,7 +172,7 @@ dependencies = [
|
|
|
172
172
|
|
|
173
173
|
[[package]]
|
|
174
174
|
name = "ast-grep-dynamic"
|
|
175
|
-
version = "0.25.
|
|
175
|
+
version = "0.25.4"
|
|
176
176
|
dependencies = [
|
|
177
177
|
"ast-grep-core",
|
|
178
178
|
"ignore",
|
|
@@ -184,7 +184,7 @@ dependencies = [
|
|
|
184
184
|
|
|
185
185
|
[[package]]
|
|
186
186
|
name = "ast-grep-language"
|
|
187
|
-
version = "0.25.
|
|
187
|
+
version = "0.25.4"
|
|
188
188
|
dependencies = [
|
|
189
189
|
"ast-grep-core",
|
|
190
190
|
"ignore",
|
|
@@ -209,13 +209,14 @@ dependencies = [
|
|
|
209
209
|
"tree-sitter-ruby",
|
|
210
210
|
"tree-sitter-rust",
|
|
211
211
|
"tree-sitter-scala",
|
|
212
|
+
"tree-sitter-sql-bigquery",
|
|
212
213
|
"tree-sitter-swift",
|
|
213
214
|
"tree-sitter-typescript",
|
|
214
215
|
]
|
|
215
216
|
|
|
216
217
|
[[package]]
|
|
217
218
|
name = "ast-grep-lsp"
|
|
218
|
-
version = "0.25.
|
|
219
|
+
version = "0.25.4"
|
|
219
220
|
dependencies = [
|
|
220
221
|
"ast-grep-config",
|
|
221
222
|
"ast-grep-core",
|
|
@@ -229,7 +230,7 @@ dependencies = [
|
|
|
229
230
|
|
|
230
231
|
[[package]]
|
|
231
232
|
name = "ast-grep-napi"
|
|
232
|
-
version = "0.25.
|
|
233
|
+
version = "0.25.4"
|
|
233
234
|
dependencies = [
|
|
234
235
|
"ast-grep-config",
|
|
235
236
|
"ast-grep-core",
|
|
@@ -248,7 +249,7 @@ dependencies = [
|
|
|
248
249
|
|
|
249
250
|
[[package]]
|
|
250
251
|
name = "ast-grep-py"
|
|
251
|
-
version = "0.25.
|
|
252
|
+
version = "0.25.4"
|
|
252
253
|
dependencies = [
|
|
253
254
|
"anyhow",
|
|
254
255
|
"ast-grep-config",
|
|
@@ -314,7 +315,7 @@ dependencies = [
|
|
|
314
315
|
|
|
315
316
|
[[package]]
|
|
316
317
|
name = "benches"
|
|
317
|
-
version = "0.25.
|
|
318
|
+
version = "0.25.4"
|
|
318
319
|
dependencies = [
|
|
319
320
|
"ast-grep-config",
|
|
320
321
|
"ast-grep-core",
|
|
@@ -324,18 +325,18 @@ dependencies = [
|
|
|
324
325
|
|
|
325
326
|
[[package]]
|
|
326
327
|
name = "bit-set"
|
|
327
|
-
version = "0.
|
|
328
|
+
version = "0.8.0"
|
|
328
329
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
329
|
-
checksum = "
|
|
330
|
+
checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
|
|
330
331
|
dependencies = [
|
|
331
332
|
"bit-vec",
|
|
332
333
|
]
|
|
333
334
|
|
|
334
335
|
[[package]]
|
|
335
336
|
name = "bit-vec"
|
|
336
|
-
version = "0.
|
|
337
|
+
version = "0.8.0"
|
|
337
338
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
338
|
-
checksum = "
|
|
339
|
+
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
|
|
339
340
|
|
|
340
341
|
[[package]]
|
|
341
342
|
name = "bitflags"
|
|
@@ -963,12 +964,12 @@ checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346"
|
|
|
963
964
|
|
|
964
965
|
[[package]]
|
|
965
966
|
name = "libloading"
|
|
966
|
-
version = "0.8.
|
|
967
|
+
version = "0.8.5"
|
|
967
968
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
968
|
-
checksum = "
|
|
969
|
+
checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
|
|
969
970
|
dependencies = [
|
|
970
971
|
"cfg-if",
|
|
971
|
-
"windows-targets 0.
|
|
972
|
+
"windows-targets 0.52.5",
|
|
972
973
|
]
|
|
973
974
|
|
|
974
975
|
[[package]]
|
|
@@ -1066,9 +1067,9 @@ checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a"
|
|
|
1066
1067
|
|
|
1067
1068
|
[[package]]
|
|
1068
1069
|
name = "napi-derive"
|
|
1069
|
-
version = "2.16.
|
|
1070
|
+
version = "2.16.9"
|
|
1070
1071
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1071
|
-
checksum = "
|
|
1072
|
+
checksum = "87c3b5d4ab13e20a4bb9d3a1e2f3d4e77eee4a205d0f810abfd226b971dc6ce5"
|
|
1072
1073
|
dependencies = [
|
|
1073
1074
|
"cfg-if",
|
|
1074
1075
|
"convert_case",
|
|
@@ -1080,9 +1081,9 @@ dependencies = [
|
|
|
1080
1081
|
|
|
1081
1082
|
[[package]]
|
|
1082
1083
|
name = "napi-derive-backend"
|
|
1083
|
-
version = "1.0.
|
|
1084
|
+
version = "1.0.71"
|
|
1084
1085
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1085
|
-
checksum = "
|
|
1086
|
+
checksum = "96de436a6ab93265beef838f8333c8345438f059df6081fe0ad0b8648ee0c524"
|
|
1086
1087
|
dependencies = [
|
|
1087
1088
|
"convert_case",
|
|
1088
1089
|
"once_cell",
|
|
@@ -1672,18 +1673,18 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
|
|
|
1672
1673
|
|
|
1673
1674
|
[[package]]
|
|
1674
1675
|
name = "thiserror"
|
|
1675
|
-
version = "1.0.
|
|
1676
|
+
version = "1.0.63"
|
|
1676
1677
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1677
|
-
checksum = "
|
|
1678
|
+
checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
|
|
1678
1679
|
dependencies = [
|
|
1679
1680
|
"thiserror-impl",
|
|
1680
1681
|
]
|
|
1681
1682
|
|
|
1682
1683
|
[[package]]
|
|
1683
1684
|
name = "thiserror-impl"
|
|
1684
|
-
version = "1.0.
|
|
1685
|
+
version = "1.0.63"
|
|
1685
1686
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1686
|
-
checksum = "
|
|
1687
|
+
checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
|
|
1687
1688
|
dependencies = [
|
|
1688
1689
|
"proc-macro2",
|
|
1689
1690
|
"quote",
|
|
@@ -1727,9 +1728,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|
|
1727
1728
|
|
|
1728
1729
|
[[package]]
|
|
1729
1730
|
name = "tokio"
|
|
1730
|
-
version = "1.38.
|
|
1731
|
+
version = "1.38.1"
|
|
1731
1732
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1732
|
-
checksum = "
|
|
1733
|
+
checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df"
|
|
1733
1734
|
dependencies = [
|
|
1734
1735
|
"backtrace",
|
|
1735
1736
|
"bytes",
|
|
@@ -1758,9 +1759,9 @@ checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf"
|
|
|
1758
1759
|
|
|
1759
1760
|
[[package]]
|
|
1760
1761
|
name = "toml_edit"
|
|
1761
|
-
version = "0.22.
|
|
1762
|
+
version = "0.22.16"
|
|
1762
1763
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1763
|
-
checksum = "
|
|
1764
|
+
checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788"
|
|
1764
1765
|
dependencies = [
|
|
1765
1766
|
"indexmap",
|
|
1766
1767
|
"toml_datetime",
|
|
@@ -1900,9 +1901,9 @@ dependencies = [
|
|
|
1900
1901
|
|
|
1901
1902
|
[[package]]
|
|
1902
1903
|
name = "tree-sitter-cpp"
|
|
1903
|
-
version = "0.22.
|
|
1904
|
+
version = "0.22.3"
|
|
1904
1905
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1905
|
-
checksum = "
|
|
1906
|
+
checksum = "1d509a22a992790d38f2c291961ff8a1ff016c437c7ec6befc9220b8eec8918c"
|
|
1906
1907
|
dependencies = [
|
|
1907
1908
|
"cc",
|
|
1908
1909
|
"tree-sitter",
|
|
@@ -2091,6 +2092,16 @@ dependencies = [
|
|
|
2091
2092
|
"tree-sitter",
|
|
2092
2093
|
]
|
|
2093
2094
|
|
|
2095
|
+
[[package]]
|
|
2096
|
+
name = "tree-sitter-sql-bigquery"
|
|
2097
|
+
version = "0.8.0"
|
|
2098
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2099
|
+
checksum = "03958a5b10ddcd25ed510cf95a9bbb36cad5837894f4b7743e6ce0e26875e463"
|
|
2100
|
+
dependencies = [
|
|
2101
|
+
"cc",
|
|
2102
|
+
"tree-sitter",
|
|
2103
|
+
]
|
|
2104
|
+
|
|
2094
2105
|
[[package]]
|
|
2095
2106
|
name = "tree-sitter-swift"
|
|
2096
2107
|
version = "0.4.2"
|
|
@@ -7,7 +7,7 @@ resolver = "2"
|
|
|
7
7
|
lto = true
|
|
8
8
|
|
|
9
9
|
[workspace.package]
|
|
10
|
-
version = "0.25.
|
|
10
|
+
version = "0.25.4"
|
|
11
11
|
authors = ["Herrington Darkholme <2883231+HerringtonDarkholme@users.noreply.github.com>"]
|
|
12
12
|
edition = "2021"
|
|
13
13
|
license = "MIT"
|
|
@@ -18,13 +18,13 @@ rust-version = "1.67"
|
|
|
18
18
|
readme = "README.md"
|
|
19
19
|
|
|
20
20
|
[workspace.dependencies]
|
|
21
|
-
ast-grep-core = { path = "crates/core", version = "0.25.
|
|
22
|
-
ast-grep-config = { path = "crates/config", version = "0.25.
|
|
23
|
-
ast-grep-dynamic = { path = "crates/dynamic", version = "0.25.
|
|
24
|
-
ast-grep-language = { path = "crates/language", version = "0.25.
|
|
25
|
-
ast-grep-lsp = { path = "crates/lsp", version = "0.25.
|
|
21
|
+
ast-grep-core = { path = "crates/core", version = "0.25.4" }
|
|
22
|
+
ast-grep-config = { path = "crates/config", version = "0.25.4" }
|
|
23
|
+
ast-grep-dynamic = { path = "crates/dynamic", version = "0.25.4" }
|
|
24
|
+
ast-grep-language = { path = "crates/language", version = "0.25.4" }
|
|
25
|
+
ast-grep-lsp = { path = "crates/lsp", version = "0.25.4" }
|
|
26
26
|
|
|
27
|
-
bit-set = { version = "0.
|
|
27
|
+
bit-set = { version = "0.8.0" }
|
|
28
28
|
ignore = { version = "0.4.22" }
|
|
29
29
|
regex = { version = "1.10.4" }
|
|
30
30
|
serde = { version = "1.0.200", features = ["derive"] }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
use crate::error::ErrorContext as EC;
|
|
2
|
-
use crate::lang::{CustomLang, LanguageGlobs, SgLang};
|
|
2
|
+
use crate::lang::{CustomLang, LanguageGlobs, SerializableInjection, SgLang};
|
|
3
3
|
|
|
4
4
|
use anyhow::{Context, Result};
|
|
5
5
|
use ast_grep_config::{
|
|
@@ -49,6 +49,9 @@ pub struct AstGrepConfig {
|
|
|
49
49
|
/// additional file globs for languages
|
|
50
50
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
51
51
|
pub language_globs: Option<LanguageGlobs>,
|
|
52
|
+
/// injection config for embedded languages
|
|
53
|
+
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
|
54
|
+
pub language_injections: Vec<SerializableInjection>,
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
pub fn find_rules(
|
|
@@ -81,6 +84,7 @@ pub fn register_custom_language(config_path: Option<PathBuf>) -> Result<()> {
|
|
|
81
84
|
if let Some(globs) = sg_config.language_globs {
|
|
82
85
|
SgLang::register_globs(globs)?;
|
|
83
86
|
}
|
|
87
|
+
SgLang::register_injections(sg_config.language_injections)?;
|
|
84
88
|
Ok(())
|
|
85
89
|
}
|
|
86
90
|
|
|
@@ -32,6 +32,7 @@ pub enum ErrorContext {
|
|
|
32
32
|
InvalidGlobalUtils,
|
|
33
33
|
GlobPattern,
|
|
34
34
|
UnrecognizableLanguage(String),
|
|
35
|
+
LangInjection,
|
|
35
36
|
// Run
|
|
36
37
|
ParsePattern,
|
|
37
38
|
LanguageNotSpecified,
|
|
@@ -71,7 +72,7 @@ impl ErrorContext {
|
|
|
71
72
|
ReadConfiguration | ReadRule(_) | WalkRuleDir(_) | WriteFile(_) => 5,
|
|
72
73
|
StdInIsNotInteractive => 6,
|
|
73
74
|
ParseTest(_) | ParseRule(_) | ParseConfiguration | GlobPattern | ParsePattern
|
|
74
|
-
| InvalidGlobalUtils => 8,
|
|
75
|
+
| InvalidGlobalUtils | LangInjection => 8,
|
|
75
76
|
CannotInferShell => 10,
|
|
76
77
|
ProjectAlreadyExist | FileAlreadyExist(_) => 17,
|
|
77
78
|
InsufficientCLIArgument(_) => 22,
|
|
@@ -147,6 +148,11 @@ impl ErrorMessage {
|
|
|
147
148
|
"The pattern in files/ignore is not a valid glob. Please refer to doc and fix the error.",
|
|
148
149
|
CONFIG_GUIDE,
|
|
149
150
|
),
|
|
151
|
+
LangInjection => Self::new(
|
|
152
|
+
"Cannot parse languageInjections in config",
|
|
153
|
+
"The rule in languageInjections is not valid. Please refer to doc and fix the error.",
|
|
154
|
+
CONFIG_GUIDE,
|
|
155
|
+
),
|
|
150
156
|
InvalidGlobalUtils => Self::new(
|
|
151
157
|
"Error occurs when parsing global utility rules",
|
|
152
158
|
"Please check the YAML rules inside the rule directory",
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
use super::SgLang;
|
|
2
|
+
use crate::error::ErrorContext as EC;
|
|
3
|
+
use ast_grep_config::{DeserializeEnv, RuleCore, SerializableRuleCore};
|
|
4
|
+
use ast_grep_core::{
|
|
5
|
+
language::{TSPoint, TSRange},
|
|
6
|
+
Doc, Language, Node, StrDoc,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
use anyhow::{Context, Result};
|
|
10
|
+
use serde::{Deserialize, Serialize};
|
|
11
|
+
|
|
12
|
+
use std::collections::{HashMap, HashSet};
|
|
13
|
+
use std::ptr::{addr_of, addr_of_mut};
|
|
14
|
+
use std::str::FromStr;
|
|
15
|
+
|
|
16
|
+
// NB, you should not use SgLang in the (de_serialize interface
|
|
17
|
+
// since Injected is used before lang registration in sgconfig.yml
|
|
18
|
+
#[derive(Serialize, Deserialize, Clone)]
|
|
19
|
+
#[serde(untagged)]
|
|
20
|
+
pub enum Injected {
|
|
21
|
+
Static(String),
|
|
22
|
+
Dynamic(Vec<String>),
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
#[derive(Serialize, Deserialize, Clone)]
|
|
26
|
+
#[serde(rename_all = "camelCase")]
|
|
27
|
+
pub struct SerializableInjection {
|
|
28
|
+
#[serde(flatten)]
|
|
29
|
+
core: SerializableRuleCore,
|
|
30
|
+
/// The host language, e.g. html, contains other languages
|
|
31
|
+
host_language: String,
|
|
32
|
+
/// Injected language according to the rule
|
|
33
|
+
/// It accepts either a string like js for single static language.
|
|
34
|
+
/// or an array of string like [js, ts] for dynamic language detection.
|
|
35
|
+
injected: Injected,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
struct Injection {
|
|
39
|
+
host: SgLang,
|
|
40
|
+
rules: Vec<(RuleCore<SgLang>, Option<String>)>,
|
|
41
|
+
injectable: HashSet<String>,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
impl Injection {
|
|
45
|
+
fn new(lang: SgLang) -> Self {
|
|
46
|
+
Self {
|
|
47
|
+
host: lang,
|
|
48
|
+
rules: vec![],
|
|
49
|
+
injectable: Default::default(),
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
pub unsafe fn register_injetables(injections: Vec<SerializableInjection>) -> Result<()> {
|
|
55
|
+
let mut injectable = HashMap::new();
|
|
56
|
+
for injection in injections {
|
|
57
|
+
register_injetable(injection, &mut injectable)?;
|
|
58
|
+
}
|
|
59
|
+
merge_default_injecatable(&mut injectable);
|
|
60
|
+
*addr_of_mut!(LANG_INJECTIONS) = injectable.into_values().collect();
|
|
61
|
+
let injects = unsafe { &*addr_of!(LANG_INJECTIONS) as &'static Vec<Injection> };
|
|
62
|
+
*addr_of_mut!(INJECTABLE_LANGS) = injects
|
|
63
|
+
.iter()
|
|
64
|
+
.map(|inj| {
|
|
65
|
+
(
|
|
66
|
+
inj.host,
|
|
67
|
+
inj.injectable.iter().map(|s| s.as_str()).collect(),
|
|
68
|
+
)
|
|
69
|
+
})
|
|
70
|
+
.collect();
|
|
71
|
+
Ok(())
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
fn merge_default_injecatable(ret: &mut HashMap<SgLang, Injection>) {
|
|
75
|
+
for (lang, injection) in ret {
|
|
76
|
+
let langs = match lang {
|
|
77
|
+
SgLang::Builtin(b) => b.injectable_languages(),
|
|
78
|
+
SgLang::Custom(c) => c.injectable_languages(),
|
|
79
|
+
};
|
|
80
|
+
let Some(langs) = langs else {
|
|
81
|
+
continue;
|
|
82
|
+
};
|
|
83
|
+
injection
|
|
84
|
+
.injectable
|
|
85
|
+
.extend(langs.iter().map(|s| s.to_string()));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
fn register_injetable(
|
|
90
|
+
injection: SerializableInjection,
|
|
91
|
+
injectable: &mut HashMap<SgLang, Injection>,
|
|
92
|
+
) -> Result<()> {
|
|
93
|
+
let lang = SgLang::from_str(&injection.host_language)?;
|
|
94
|
+
let env = DeserializeEnv::new(lang);
|
|
95
|
+
let rule = injection.core.get_matcher(env).context(EC::LangInjection)?;
|
|
96
|
+
let default_lang = match &injection.injected {
|
|
97
|
+
Injected::Static(s) => Some(s.clone()),
|
|
98
|
+
Injected::Dynamic(_) => None,
|
|
99
|
+
};
|
|
100
|
+
let entry = injectable
|
|
101
|
+
.entry(lang)
|
|
102
|
+
.or_insert_with(|| Injection::new(lang));
|
|
103
|
+
match injection.injected {
|
|
104
|
+
Injected::Static(s) => {
|
|
105
|
+
entry.injectable.insert(s);
|
|
106
|
+
}
|
|
107
|
+
Injected::Dynamic(v) => entry.injectable.extend(v),
|
|
108
|
+
}
|
|
109
|
+
entry.rules.push((rule, default_lang));
|
|
110
|
+
Ok(())
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static mut LANG_INJECTIONS: Vec<Injection> = vec![];
|
|
114
|
+
static mut INJECTABLE_LANGS: Vec<(SgLang, Vec<&'static str>)> = vec![];
|
|
115
|
+
|
|
116
|
+
pub fn injectable_languages(lang: SgLang) -> Option<&'static [&'static str]> {
|
|
117
|
+
// NB: custom injection and builtin injections are resolved in INJECTABLE_LANGS
|
|
118
|
+
let injections =
|
|
119
|
+
unsafe { &*addr_of!(INJECTABLE_LANGS) as &'static Vec<(SgLang, Vec<&'static str>)> };
|
|
120
|
+
let Some(injection) = injections.iter().find(|i| i.0 == lang) else {
|
|
121
|
+
return match lang {
|
|
122
|
+
SgLang::Builtin(b) => b.injectable_languages(),
|
|
123
|
+
SgLang::Custom(c) => c.injectable_languages(),
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
Some(&injection.1)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
pub fn extract_injections<D: Doc>(root: Node<D>) -> HashMap<String, Vec<TSRange>> {
|
|
130
|
+
// NB Only works in the CLI crate because we only has Node<SgLang>
|
|
131
|
+
let root: Node<StrDoc<SgLang>> = unsafe { std::mem::transmute(root) };
|
|
132
|
+
let mut ret = match root.lang() {
|
|
133
|
+
SgLang::Custom(c) => c.extract_injections(root.clone()),
|
|
134
|
+
SgLang::Builtin(b) => b.extract_injections(root.clone()),
|
|
135
|
+
};
|
|
136
|
+
let injections = unsafe { &*addr_of!(LANG_INJECTIONS) };
|
|
137
|
+
extract_custom_inject(injections, root, &mut ret);
|
|
138
|
+
ret
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
fn extract_custom_inject(
|
|
142
|
+
injections: &[Injection],
|
|
143
|
+
root: Node<StrDoc<SgLang>>,
|
|
144
|
+
ret: &mut HashMap<String, Vec<TSRange>>,
|
|
145
|
+
) {
|
|
146
|
+
let Some(rules) = injections.iter().find(|n| n.host == *root.lang()) else {
|
|
147
|
+
return;
|
|
148
|
+
};
|
|
149
|
+
for (rule, default_lang) in &rules.rules {
|
|
150
|
+
for m in root.find_all(rule) {
|
|
151
|
+
let env = m.get_env();
|
|
152
|
+
let Some(region) = env.get_match("CONTENT") else {
|
|
153
|
+
continue;
|
|
154
|
+
};
|
|
155
|
+
let Some(lang) = env
|
|
156
|
+
.get_match("LANG")
|
|
157
|
+
.map(|n| n.text().to_string())
|
|
158
|
+
.or_else(|| default_lang.clone())
|
|
159
|
+
else {
|
|
160
|
+
continue;
|
|
161
|
+
};
|
|
162
|
+
let range = node_to_range(region);
|
|
163
|
+
ret.entry(lang).or_default().push(range);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
fn node_to_range<D: Doc>(node: &Node<D>) -> TSRange {
|
|
169
|
+
let r = node.range();
|
|
170
|
+
let start = node.start_pos();
|
|
171
|
+
let sp = TSPoint::new(start.0 as u32, start.1 as u32);
|
|
172
|
+
let end = node.end_pos();
|
|
173
|
+
let ep = TSPoint::new(end.0 as u32, end.1 as u32);
|
|
174
|
+
TSRange::new(r.start as u32, r.end as u32, &sp, &ep)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
#[cfg(test)]
|
|
178
|
+
mod test {
|
|
179
|
+
use super::*;
|
|
180
|
+
use ast_grep_config::from_str;
|
|
181
|
+
use ast_grep_language::SupportLang;
|
|
182
|
+
const DYNAMIC: &str = "
|
|
183
|
+
hostLanguage: js
|
|
184
|
+
rule:
|
|
185
|
+
pattern: styled.$LANG`$CONTENT`
|
|
186
|
+
injected: [css]";
|
|
187
|
+
const STATIC: &str = "
|
|
188
|
+
hostLanguage: js
|
|
189
|
+
rule:
|
|
190
|
+
pattern: styled`$CONTENT`
|
|
191
|
+
injected: css";
|
|
192
|
+
#[test]
|
|
193
|
+
fn test_deserialize() {
|
|
194
|
+
let inj: SerializableInjection = from_str(STATIC).expect("should ok");
|
|
195
|
+
assert!(matches!(inj.injected, Injected::Static(_)));
|
|
196
|
+
let inj: SerializableInjection = from_str(DYNAMIC).expect("should ok");
|
|
197
|
+
assert!(matches!(inj.injected, Injected::Dynamic(_)));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const BAD: &str = "
|
|
201
|
+
hostLanguage: HTML
|
|
202
|
+
rule:
|
|
203
|
+
kind: not_exist
|
|
204
|
+
injected: [js, ts, tsx]";
|
|
205
|
+
|
|
206
|
+
#[test]
|
|
207
|
+
fn test_bad_inject() {
|
|
208
|
+
let mut map = HashMap::new();
|
|
209
|
+
let inj: SerializableInjection = from_str(BAD).expect("should ok");
|
|
210
|
+
let ret = register_injetable(inj, &mut map);
|
|
211
|
+
assert!(ret.is_err());
|
|
212
|
+
let ec = ret.unwrap_err().downcast::<EC>().expect("should ok");
|
|
213
|
+
assert!(matches!(ec, EC::LangInjection));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
#[test]
|
|
217
|
+
fn test_good_injection() {
|
|
218
|
+
let mut map = HashMap::new();
|
|
219
|
+
let inj: SerializableInjection = from_str(STATIC).expect("should ok");
|
|
220
|
+
let ret = register_injetable(inj, &mut map);
|
|
221
|
+
assert!(ret.is_ok());
|
|
222
|
+
let inj: SerializableInjection = from_str(DYNAMIC).expect("should ok");
|
|
223
|
+
let ret = register_injetable(inj, &mut map);
|
|
224
|
+
assert!(ret.is_ok());
|
|
225
|
+
assert_eq!(map.len(), 1);
|
|
226
|
+
let injections: Vec<_> = map.into_values().collect();
|
|
227
|
+
let mut ret = HashMap::new();
|
|
228
|
+
let sg =
|
|
229
|
+
SgLang::from(SupportLang::JavaScript).ast_grep("const a = styled`.btn { margin: 0; }`");
|
|
230
|
+
let root = sg.root();
|
|
231
|
+
extract_custom_inject(&injections, root, &mut ret);
|
|
232
|
+
assert_eq!(ret.len(), 1);
|
|
233
|
+
assert_eq!(ret["css"].len(), 1);
|
|
234
|
+
assert!(!ret.contains_key("js"));
|
|
235
|
+
ret.clear();
|
|
236
|
+
let sg =
|
|
237
|
+
SgLang::from(SupportLang::JavaScript).ast_grep("const a = styled.css`.btn { margin: 0; }`");
|
|
238
|
+
let root = sg.root();
|
|
239
|
+
extract_custom_inject(&injections, root, &mut ret);
|
|
240
|
+
assert_eq!(ret.len(), 1);
|
|
241
|
+
assert_eq!(ret["css"].len(), 1);
|
|
242
|
+
assert!(!ret.contains_key("js"));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
mod custom_lang;
|
|
2
|
+
mod injection;
|
|
2
3
|
mod lang_globs;
|
|
3
4
|
|
|
4
5
|
use anyhow::Result;
|
|
@@ -18,9 +19,10 @@ use std::path::{Path, PathBuf};
|
|
|
18
19
|
use std::str::FromStr;
|
|
19
20
|
|
|
20
21
|
pub use custom_lang::CustomLang;
|
|
22
|
+
pub use injection::SerializableInjection;
|
|
21
23
|
pub use lang_globs::LanguageGlobs;
|
|
22
24
|
|
|
23
|
-
#[derive(Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
25
|
+
#[derive(Copy, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)]
|
|
24
26
|
#[serde(untagged)]
|
|
25
27
|
pub enum SgLang {
|
|
26
28
|
// inlined support lang expando char
|
|
@@ -51,6 +53,10 @@ impl SgLang {
|
|
|
51
53
|
Ok(())
|
|
52
54
|
}
|
|
53
55
|
|
|
56
|
+
pub fn register_injections(injections: Vec<SerializableInjection>) -> Result<()> {
|
|
57
|
+
unsafe { injection::register_injetables(injections) }
|
|
58
|
+
}
|
|
59
|
+
|
|
54
60
|
pub fn all_langs() -> Vec<Self> {
|
|
55
61
|
let builtin = SupportLang::all_langs().iter().copied().map(Self::Builtin);
|
|
56
62
|
let customs = DynamicLang::all_langs().into_iter().map(Self::Custom);
|
|
@@ -180,17 +186,11 @@ impl Language for SgLang {
|
|
|
180
186
|
}
|
|
181
187
|
|
|
182
188
|
fn injectable_languages(&self) -> Option<&'static [&'static str]> {
|
|
183
|
-
|
|
184
|
-
Builtin(b) => b.injectable_languages(),
|
|
185
|
-
Custom(c) => c.injectable_languages(),
|
|
186
|
-
}
|
|
189
|
+
injection::injectable_languages(*self)
|
|
187
190
|
}
|
|
188
191
|
|
|
189
192
|
fn extract_injections<D: Doc>(&self, root: Node<D>) -> HashMap<String, Vec<TSRange>> {
|
|
190
|
-
|
|
191
|
-
Builtin(b) => b.extract_injections(root),
|
|
192
|
-
Custom(c) => c.extract_injections(root),
|
|
193
|
-
}
|
|
193
|
+
injection::extract_injections(root)
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
|
|
@@ -212,8 +212,9 @@ fn create_new_project(arg: NewArg) -> Result<()> {
|
|
|
212
212
|
rule_dirs: vec![rule_dirs],
|
|
213
213
|
test_configs: test_dirs.map(|t| vec![t]),
|
|
214
214
|
util_dirs: utils.map(|u| vec![u]),
|
|
215
|
-
custom_languages: None,
|
|
216
|
-
language_globs: None,
|
|
215
|
+
custom_languages: None, // advanced feature, skip now
|
|
216
|
+
language_globs: None, // advanced feature, skip now
|
|
217
|
+
language_injections: vec![], // advanced feature
|
|
217
218
|
};
|
|
218
219
|
let config_path = arg.base_dir.join("sgconfig.yml");
|
|
219
220
|
let f = File::create(config_path)?;
|
|
@@ -159,7 +159,15 @@ fn filter_result(result: Result<DirEntry, ignore::Error>) -> Option<PathBuf> {
|
|
|
159
159
|
return None;
|
|
160
160
|
}
|
|
161
161
|
};
|
|
162
|
-
entry.file_type()?.is_file()
|
|
162
|
+
if !entry.file_type()?.is_file() {
|
|
163
|
+
return None;
|
|
164
|
+
}
|
|
165
|
+
let path = entry.into_path();
|
|
166
|
+
// TODO: is it correct here? see https://github.com/ast-grep/ast-grep/issues/1343
|
|
167
|
+
match path.strip_prefix("./") {
|
|
168
|
+
Ok(p) => Some(p.to_path_buf()),
|
|
169
|
+
Err(_) => Some(path),
|
|
170
|
+
}
|
|
163
171
|
}
|
|
164
172
|
|
|
165
173
|
fn run_worker<W: PathWorker + ?Sized + 'static>(worker: Arc<W>) -> Result<()> {
|