feat: support indexing typescript / javascript / tsx / jsx (#539)

r0.3
Meng Zhang 2023-10-11 17:42:58 -07:00 committed by GitHub
parent 92c1f5a8c0
commit 888fbca7e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 59 additions and 14 deletions

11
Cargo.lock generated
View File

@ -3200,6 +3200,7 @@ dependencies = [
"tree-sitter-python",
"tree-sitter-rust",
"tree-sitter-tags",
"tree-sitter-typescript",
"walkdir",
]
@ -3942,6 +3943,16 @@ dependencies = [
"tree-sitter",
]
[[package]]
name = "tree-sitter-typescript"
version = "0.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75049f0aafabb2aac205d7bb24da162b53dcd0cfb326785f25a2f32efa8071a"
dependencies = [
"cc",
"tree-sitter",
]
[[package]]
name = "try-lock"
version = "0.2.4"

View File

@ -20,6 +20,7 @@ serde-jsonlines = { workspace = true }
file-rotate = "0.7.5"
tree-sitter-python = "0.20.2"
tree-sitter-rust = "0.20.3"
tree-sitter-typescript = "0.20.3"
[dev-dependencies]
temp_testdir = "0.2"

View File

@ -0,0 +1,31 @@
; Modified based on https://github.com/tree-sitter/tree-sitter-typescript/blob/master/queries/tags.scm
(function_signature
name: (identifier) @name) @definition.function
(method_signature
name: (property_identifier) @name) @definition.method
(abstract_method_signature
name: (property_identifier) @name) @definition.method
(abstract_class_declaration
name: (type_identifier) @name) @definition.class
(module
name: (identifier) @name) @definition.module
(interface_declaration
name: (type_identifier) @name) @definition.interface
(type_annotation
(type_identifier) @name) @reference.type
(new_expression
constructor: (identifier) @name) @reference.class
(call_expression
function: (identifier) @name) @reference.call
(call_expression
function: (member_expression property: (property_identifier) @name)) @reference.call

View File

@ -193,8 +193,6 @@ lazy_static! {
("haskell", vec!["hs"]),
("html", vec!["html"]),
("java", vec!["java"]),
("javascript", vec!["js", "mjs"]),
("jsx", vec!["jsx"]),
("julia", vec!["jl"]),
("lua", vec!["lua"]),
("makefile", vec!["Makefile"]),
@ -208,8 +206,10 @@ lazy_static! {
("sql", vec!["sql"]),
("scala", vec!["scala"]),
("shellscript", vec!["sh", "bash", "command", "zsh"]),
("typescript", vec!["ts", "mts"]),
("tsx", vec!["tsx"]),
(
"javascript-typescript",
vec!["ts", "mts", "js", "mjs", "jsx", "tsx"],
),
("tex", vec!["tex"]),
("vb", vec!["vb"]),
])
@ -248,6 +248,17 @@ lazy_static! {
.unwrap(),
),
),
(
"javascript-typescript",
TagsConfigurationSync(
TagsConfiguration::new(
tree_sitter_typescript::language_tsx(),
include_str!("../queries/tsx.scm"),
"",
)
.unwrap(),
),
),
])
};
}

View File

@ -91,11 +91,10 @@ fn from_source_file(file: SourceFile) -> impl Iterator<Item = IndexedDocument> {
return None;
}
let language = reduce_language_if_needed(&file.language).to_owned();
Some(IndexedDocument {
git_url: file.git_url.clone(),
filepath: file.filepath.clone(),
language,
language: file.language.clone(),
name,
body,
kind: tag.syntax_type_name,
@ -103,14 +102,6 @@ fn from_source_file(file: SourceFile) -> impl Iterator<Item = IndexedDocument> {
})
}
fn reduce_language_if_needed(language: &str) -> &str {
if ["javascript", "jsx", "typescript", "tsx"].contains(&language) {
"javascript-typescript"
} else {
language
}
}
#[cfg(test)]
mod tests {
use serde_json::{from_value, json};