fix(repo-map): do not report errors when encountering unsupported languages (#652)

This commit is contained in:
yetone 2024-09-27 02:19:01 +08:00 committed by GitHub
parent 131d800c16
commit 302f207951
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 42 additions and 13 deletions

View File

@ -40,18 +40,18 @@ pub enum Definition {
Variable(Variable), Variable(Variable),
} }
fn get_ts_language(language: &str) -> Result<LanguageFn, String> { fn get_ts_language(language: &str) -> Option<LanguageFn> {
match language { match language {
"rust" => Ok(tree_sitter_rust::LANGUAGE), "rust" => Some(tree_sitter_rust::LANGUAGE),
"python" => Ok(tree_sitter_python::LANGUAGE), "python" => Some(tree_sitter_python::LANGUAGE),
"javascript" => Ok(tree_sitter_javascript::LANGUAGE), "javascript" => Some(tree_sitter_javascript::LANGUAGE),
"typescript" => Ok(tree_sitter_typescript::LANGUAGE_TSX), "typescript" => Some(tree_sitter_typescript::LANGUAGE_TSX),
"go" => Ok(tree_sitter_go::LANGUAGE), "go" => Some(tree_sitter_go::LANGUAGE),
"c" => Ok(tree_sitter_c::LANGUAGE), "c" => Some(tree_sitter_c::LANGUAGE),
"cpp" => Ok(tree_sitter_cpp::LANGUAGE), "cpp" => Some(tree_sitter_cpp::LANGUAGE),
"lua" => Ok(tree_sitter_lua::LANGUAGE), "lua" => Some(tree_sitter_lua::LANGUAGE),
"ruby" => Ok(tree_sitter_ruby::LANGUAGE), "ruby" => Some(tree_sitter_ruby::LANGUAGE),
_ => Err(format!("Unsupported language: {language}")), _ => None,
} }
} }
@ -66,7 +66,11 @@ const TYPESCRIPT_QUERY: &str = include_str!("../queries/tree-sitter-typescript-d
const RUBY_QUERY: &str = include_str!("../queries/tree-sitter-ruby-defs.scm"); const RUBY_QUERY: &str = include_str!("../queries/tree-sitter-ruby-defs.scm");
fn get_definitions_query(language: &str) -> Result<Query, String> { fn get_definitions_query(language: &str) -> Result<Query, String> {
let ts_language = get_ts_language(language)?; let ts_language = get_ts_language(language);
if ts_language.is_none() {
return Err(format!("Unsupported language: {language}"));
}
let ts_language = ts_language.unwrap();
let contents = match language { let contents = match language {
"c" => C_QUERY, "c" => C_QUERY,
"cpp" => CPP_QUERY, "cpp" => CPP_QUERY,
@ -148,7 +152,13 @@ fn is_first_letter_uppercase(name: &str) -> bool {
// Given a language, parse the given source code and return exported definitions // Given a language, parse the given source code and return exported definitions
fn extract_definitions(language: &str, source: &str) -> Result<Vec<Definition>, String> { fn extract_definitions(language: &str, source: &str) -> Result<Vec<Definition>, String> {
let ts_language = get_ts_language(language)?; let ts_language = get_ts_language(language);
if ts_language.is_none() {
return Ok(vec![]);
}
let ts_language = ts_language.unwrap();
let mut definitions = Vec::new(); let mut definitions = Vec::new();
let mut parser = Parser::new(); let mut parser = Parser::new();
@ -891,4 +901,15 @@ mod tests {
let expected = "var test_var;func test_func(a, b) -> void;"; let expected = "var test_var;func test_func(a, b) -> void;";
assert_eq!(stringified, expected); assert_eq!(stringified, expected);
} }
#[test]
fn test_unsupported_language() {
let source = "print('Hello, world!')";
let definitions = extract_definitions("unknown", source).unwrap();
let stringified = stringify_definitions(&definitions);
println!("{stringified}");
let expected = "";
assert_eq!(stringified, expected);
}
} }

View File

@ -53,6 +53,14 @@ end
local cache = {} local cache = {}
function RepoMap.get_repo_map(file_ext) function RepoMap.get_repo_map(file_ext)
local repo_map = RepoMap._get_repo_map(file_ext) or {}
if not repo_map or next(repo_map) == nil then
Utils.warn("The repo map is empty. Maybe do not support this language: " .. file_ext)
end
return repo_map
end
function RepoMap._get_repo_map(file_ext)
file_ext = file_ext or vim.fn.expand("%:e") file_ext = file_ext or vim.fn.expand("%:e")
local project_root = Utils.root.get() local project_root = Utils.root.get()
local cache_key = project_root .. "." .. file_ext local cache_key = project_root .. "." .. file_ext