Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
bb61c70
refactor(native): extract generic walk_tree to eliminate walk_node_de…
carlos-alm Mar 30, 2026
c43fb65
feat: add C, C++, Kotlin, Swift, Scala, Bash language support (#7.2)
carlos-alm Mar 30, 2026
d193e20
fix: resolve merge conflicts with main
carlos-alm Mar 30, 2026
b6a61eb
fix(native): remove local AST config shadowing in all new extractors …
carlos-alm Mar 30, 2026
54c8f88
fix(kotlin): align object_declaration kind to 'class' across engines …
carlos-alm Mar 30, 2026
b5a3bc6
fix(swift): distinguish extends vs implements in inheritance (#708)
carlos-alm Mar 30, 2026
3ba1519
fix(scala,swift): use correct kind for top-level val/var/property (#708)
carlos-alm Mar 30, 2026
9ce6657
fix(complexity): support multiple logical_node_types for Kotlin || (#…
carlos-alm Mar 30, 2026
a00650b
fix: apply biome formatting and import sort fixes (#708)
carlos-alm Mar 30, 2026
1ad60cb
fix(native): use language() for tree-sitter-kotlin 0.3 API (#708)
carlos-alm Mar 30, 2026
49cbeba
fix(ci): add .npmrc with legacy-peer-deps for tree-sitter conflicts (…
carlos-alm Mar 30, 2026
b5141d6
fix(native): bridge tree-sitter-kotlin 0.3 to tree-sitter 0.24 API (#…
carlos-alm Mar 30, 2026
730e52a
fix: resolve CI failures — SymbolKind types and Kotlin cross-platform…
carlos-alm Mar 30, 2026
02d4951
fix(ci): replace tree-sitter-kotlin with tree-sitter-kotlin-sg to fix…
carlos-alm Mar 30, 2026
e96ed95
Merge branch 'main' into feat/phase7-languages
carlos-alm Mar 30, 2026
22c8e02
fix(parity): align Scala TS extractor kinds and inheritance with Rust…
carlos-alm Mar 30, 2026
c5529b6
fix(ci): increase embedding regression test timeout to 240s (#708)
carlos-alm Mar 30, 2026
07a1d6f
fix(ci): fallback to full rebuild when cached codegraph DB is malform…
carlos-alm Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions crates/codegraph-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ tree-sitter-java = "0.23"
tree-sitter-c-sharp = "0.23"
tree-sitter-ruby = "0.23"
tree-sitter-php = "0.23"
tree-sitter-c = "0.23"
tree-sitter-cpp = "0.23"
tree-sitter-kotlin = "0.3"
tree-sitter-swift = "0.7"
tree-sitter-scala = "0.25"
tree-sitter-bash = "0.23"
tree-sitter-hcl = "1"
rayon = "1"
# `bundled` embeds a second SQLite copy (better-sqlite3 already bundles one).
Expand Down
216 changes: 216 additions & 0 deletions crates/codegraph-core/src/cfg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,216 @@ pub static PHP_CFG: CfgRules = CfgRules {
labeled_node: None,
};

pub static C_CFG: CfgRules = CfgRules {
if_node: Some("if_statement"),
if_nodes: &[],
elif_node: None,
else_clause: None,
else_via_alternative: true,
if_consequent_field: None,
for_nodes: &["for_statement"],
condition_field: Some("condition"),
while_node: Some("while_statement"),
while_nodes: &[],
do_node: Some("do_statement"),
infinite_loop_node: None,
unless_node: None,
until_node: None,
switch_node: Some("switch_statement"),
switch_nodes: &[],
case_node: Some("case_statement"),
case_nodes: &[],
default_node: Some("default_statement"),
wildcard_pattern_node: None,
try_node: None,
try_nodes: &[],
catch_node: None,
finally_node: None,
else_node: None,
return_node: Some("return_statement"),
throw_node: None,
break_node: Some("break_statement"),
continue_node: Some("continue_statement"),
block_node: Some("compound_statement"),
block_nodes: &[],
labeled_node: Some("labeled_statement"),
};

pub static CPP_CFG: CfgRules = CfgRules {
if_node: Some("if_statement"),
if_nodes: &[],
elif_node: None,
else_clause: None,
else_via_alternative: true,
if_consequent_field: None,
for_nodes: &["for_statement", "for_range_loop"],
condition_field: Some("condition"),
while_node: Some("while_statement"),
while_nodes: &[],
do_node: Some("do_statement"),
infinite_loop_node: None,
unless_node: None,
until_node: None,
switch_node: Some("switch_statement"),
switch_nodes: &[],
case_node: Some("case_statement"),
case_nodes: &[],
default_node: Some("default_statement"),
wildcard_pattern_node: None,
try_node: Some("try_statement"),
try_nodes: &[],
catch_node: Some("catch_clause"),
finally_node: None,
else_node: None,
return_node: Some("return_statement"),
throw_node: Some("throw_statement"),
break_node: Some("break_statement"),
continue_node: Some("continue_statement"),
block_node: Some("compound_statement"),
block_nodes: &[],
labeled_node: Some("labeled_statement"),
};

pub static KOTLIN_CFG: CfgRules = CfgRules {
if_node: Some("if_expression"),
if_nodes: &[],
elif_node: None,
else_clause: None,
else_via_alternative: true,
if_consequent_field: None,
for_nodes: &["for_statement"],
condition_field: Some("condition"),
while_node: Some("while_statement"),
while_nodes: &[],
do_node: Some("do_while_statement"),
infinite_loop_node: None,
unless_node: None,
until_node: None,
switch_node: Some("when_expression"),
switch_nodes: &[],
case_node: Some("when_entry"),
case_nodes: &[],
default_node: None,
wildcard_pattern_node: None,
try_node: Some("try_expression"),
try_nodes: &[],
catch_node: Some("catch_block"),
finally_node: Some("finally_block"),
else_node: None,
return_node: Some("jump_expression"),
throw_node: Some("throw_expression"),
break_node: Some("jump_expression"),
continue_node: Some("jump_expression"),
block_node: None,
block_nodes: &["statements"],
labeled_node: None,
};

pub static SWIFT_CFG: CfgRules = CfgRules {
if_node: Some("if_statement"),
if_nodes: &[],
elif_node: None,
else_clause: None,
else_via_alternative: true,
if_consequent_field: None,
for_nodes: &["for_in_statement"],
condition_field: Some("condition"),
while_node: Some("while_statement"),
while_nodes: &[],
do_node: Some("repeat_while_statement"),
infinite_loop_node: None,
unless_node: None,
until_node: None,
switch_node: Some("switch_statement"),
switch_nodes: &[],
case_node: Some("switch_entry"),
case_nodes: &[],
default_node: None,
wildcard_pattern_node: Some("wildcard_pattern"),
try_node: Some("do_statement"),
try_nodes: &[],
catch_node: Some("catch_clause"),
finally_node: None,
else_node: None,
return_node: Some("return_statement"),
throw_node: Some("throw_statement"),
break_node: Some("break_statement"),
continue_node: Some("continue_statement"),
block_node: None,
block_nodes: &["code_block", "class_body"],
labeled_node: Some("labeled_statement"),
};

pub static SCALA_CFG: CfgRules = CfgRules {
if_node: Some("if_expression"),
if_nodes: &[],
elif_node: None,
else_clause: None,
else_via_alternative: true,
if_consequent_field: None,
for_nodes: &["for_expression"],
condition_field: Some("condition"),
while_node: Some("while_expression"),
while_nodes: &[],
do_node: None,
infinite_loop_node: None,
unless_node: None,
until_node: None,
switch_node: Some("match_expression"),
switch_nodes: &[],
case_node: Some("case_clause"),
case_nodes: &[],
default_node: None,
wildcard_pattern_node: Some("wildcard"),
try_node: Some("try_expression"),
try_nodes: &[],
catch_node: Some("catch_clause"),
finally_node: Some("finally_clause"),
else_node: None,
return_node: Some("return_expression"),
throw_node: Some("throw_expression"),
break_node: None,
continue_node: None,
block_node: Some("block"),
block_nodes: &["template_body"],
labeled_node: None,
};

pub static BASH_CFG: CfgRules = CfgRules {
if_node: Some("if_statement"),
if_nodes: &[],
elif_node: Some("elif_clause"),
else_clause: Some("else_clause"),
else_via_alternative: false,
if_consequent_field: None,
for_nodes: &["for_statement", "c_style_for_statement"],
condition_field: Some("condition"),
while_node: Some("while_statement"),
while_nodes: &[],
do_node: None,
infinite_loop_node: None,
unless_node: None,
until_node: Some("until_statement"),
switch_node: Some("case_statement"),
switch_nodes: &[],
case_node: Some("case_item"),
case_nodes: &[],
default_node: None,
wildcard_pattern_node: None,
try_node: None,
try_nodes: &[],
catch_node: None,
finally_node: None,
else_node: Some("else_clause"),
return_node: Some("return_statement"),
throw_node: None,
break_node: Some("break_statement"),
continue_node: Some("continue_statement"),
block_node: Some("compound_statement"),
block_nodes: &[],
labeled_node: None,
};

/// Get CFG rules for a language ID.
pub fn get_cfg_rules(lang_id: &str) -> Option<&'static CfgRules> {
match lang_id {
Expand All @@ -341,6 +551,12 @@ pub fn get_cfg_rules(lang_id: &str) -> Option<&'static CfgRules> {
"csharp" => Some(&CSHARP_CFG),
"ruby" => Some(&RUBY_CFG),
"php" => Some(&PHP_CFG),
"c" => Some(&C_CFG),
"cpp" => Some(&CPP_CFG),
"kotlin" => Some(&KOTLIN_CFG),
"swift" => Some(&SWIFT_CFG),
"scala" => Some(&SCALA_CFG),
"bash" => Some(&BASH_CFG),
_ => None,
}
}
Expand Down
Loading
Loading