fix(repo-map): do not report errors when encountering unsupported languages (#652)
This commit is contained in:
parent
131d800c16
commit
302f207951
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user