Files
2026-07-13 13:33:09 +08:00

925 lines
17 KiB
Go

package file_map
import shared "plandex-shared"
type nodeType string
type matchType string
const (
matchTypeEqual matchType = "equal"
matchTypePrefix matchType = "prefix"
matchTypeSuffix matchType = "suffix"
)
type langSet map[shared.Language]bool
type nodeConfig struct {
nodeMatch matchType
ignore bool
all bool
except langSet
languages langSet
onlyChildren map[nodeType]bool
skipForward map[nodeType]bool
}
type nodeMap map[nodeType]nodeConfig
var assignmentNodeMap = nodeMap{
// Common patterns across many languages
"assignment_expression": {
nodeMatch: matchTypeEqual,
all: true,
},
"declaration": {
nodeMatch: matchTypeEqual,
all: true,
},
"variable_declaration": {
nodeMatch: matchTypeEqual,
all: true,
},
"variable_assignment": {
nodeMatch: matchTypeEqual,
all: true,
},
"const_spec": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGo: true,
},
},
"var_spec": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGo: true,
},
},
"lexical_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageJavascript: true,
shared.LanguageTypescript: true,
shared.LanguageJsx: true,
shared.LanguageTsx: true,
},
},
"field_definition": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageJavascript: true,
shared.LanguageTypescript: true,
shared.LanguageJsx: true,
shared.LanguageTsx: true,
},
},
"interface_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePhp: true,
},
},
"trait_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePhp: true,
},
},
"enum_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePhp: true,
shared.LanguageCsharp: true,
},
},
"global_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePhp: true,
},
},
"static_variable_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePhp: true,
},
},
"type_alias_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageTsx: true,
shared.LanguageElm: true,
},
},
"assignment_statement": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePython: true,
},
},
"class_variable_assignment": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"assignment": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"let_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRust: true,
},
},
"const_item": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRust: true,
},
},
"static_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageJava: true,
shared.LanguageCsharp: true,
},
},
"member_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageJava: true,
shared.LanguageCsharp: true,
},
},
"field_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageJava: true,
shared.LanguageCsharp: true,
},
},
"property_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageKotlin: true,
shared.LanguageScala: true,
shared.LanguagePhp: true,
shared.LanguageSwift: true,
},
},
"let_binding": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageOCaml: true,
},
},
"value_binding": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageOCaml: true,
},
},
"unary_operator": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageElixir: true,
},
},
"value_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageElm: true,
},
},
"declaration_command": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageBash: true,
},
},
"type_item": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRust: true,
},
},
"val_definition": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageScala: true,
},
},
"type_definition": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageScala: true,
},
},
"typealias_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageSwift: true,
},
},
"_field_definition": {
nodeMatch: matchTypeSuffix,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageTsx: true,
shared.LanguageJavascript: true,
shared.LanguageJsx: true,
},
},
}
var definitionNodeMap = nodeMap{
// Common patterns across languages
"_definition": {
nodeMatch: matchTypeSuffix,
all: true,
},
"_declaration": {
nodeMatch: matchTypeSuffix,
all: true,
},
"_declarator": {
nodeMatch: matchTypeSuffix,
all: true,
},
"_spec": {
nodeMatch: matchTypeSuffix,
all: true,
},
"_binding": {
nodeMatch: matchTypeSuffix,
all: true,
},
"_signature": {
nodeMatch: matchTypeSuffix,
all: true,
},
"declaration": {
nodeMatch: matchTypeEqual,
all: true,
},
"_specifier": {
nodeMatch: matchTypeSuffix,
all: true,
},
"interface_": {
nodeMatch: matchTypePrefix,
all: true,
},
// Language-specific definitions
"def": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"method": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"defmodule": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageElixir: true,
},
},
"defmacro": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageElixir: true,
},
},
"port": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageElm: true,
},
},
"functor": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageOCaml: true,
},
},
"_def": {
nodeMatch: matchTypeSuffix,
languages: langSet{
shared.LanguageC: true,
shared.LanguageCpp: true,
},
},
"type_annotation": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageElm: true,
},
},
"function_statement": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageLua: true,
},
},
"rule_set": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageCss: true,
},
},
"from_instruction": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageDockerfile: true,
},
},
"entrypoint_instruction": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageDockerfile: true,
},
},
"cmd_instruction": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageDockerfile: true,
},
},
"expose_instruction": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageDockerfile: true,
},
},
"copy_instruction": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageDockerfile: true,
},
},
"env_instruction": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageDockerfile: true,
},
},
// Ignored patterns
"import_": {
nodeMatch: matchTypePrefix,
ignore: true,
all: true,
},
"require_": {
nodeMatch: matchTypePrefix,
ignore: true,
all: true,
},
"use_": {
nodeMatch: matchTypePrefix,
ignore: true,
all: true,
},
"namespace_use_": {
nodeMatch: matchTypePrefix,
ignore: true,
all: true,
},
"using_": {
nodeMatch: matchTypePrefix,
ignore: true,
all: true,
},
"include_": {
nodeMatch: matchTypePrefix,
ignore: true,
all: true,
},
"package_": {
nodeMatch: matchTypePrefix,
ignore: true,
all: true,
},
"_include": {
nodeMatch: matchTypeSuffix,
ignore: true,
languages: langSet{
shared.LanguageC: true,
shared.LanguageCpp: true,
},
},
"_item": {
nodeMatch: matchTypeSuffix,
languages: langSet{
shared.LanguageRust: true,
},
},
}
var parentNodeMap = nodeMap{
// Common patterns
"class_": {
nodeMatch: matchTypePrefix,
all: true,
},
"module_": {
nodeMatch: matchTypePrefix,
all: true,
},
"namespace_": {
nodeMatch: matchTypePrefix,
all: true,
},
// Language-specific parents
"object": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageScala: true,
},
},
"object_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageKotlin: true,
},
},
"protocol": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageSwift: true,
},
},
"protocol_": {
nodeMatch: matchTypePrefix,
languages: langSet{
shared.LanguageElixir: true,
},
},
"extension": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageSwift: true,
},
},
"const_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGo: true,
},
},
"var_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGo: true,
},
},
"template_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageCpp: true,
},
},
"export_statement": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageJavascript: true,
shared.LanguageTsx: true,
shared.LanguageJsx: true,
},
onlyChildren: map[nodeType]bool{
"lexical_declaration": true,
"variable_declaration": true,
"type_alias_declaration": true,
"interface_declaration": true,
"enum_declaration": true,
"class_declaration": true,
"function_declaration": true,
"arrow_function": true,
},
},
"module": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"class": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"singleton_class": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"enum_entry": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageKotlin: true,
},
},
"closure": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGroovy: true,
},
},
"impl_item": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRust: true,
},
},
"trait_item": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRust: true,
},
},
"trait_definition": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageScala: true,
},
},
"object_definition": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageScala: true,
},
},
"function_statement": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageLua: true,
},
onlyChildren: map[nodeType]bool{
"function_statement": true,
},
},
"internal_module": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageJavascript: true,
shared.LanguageTsx: true,
shared.LanguageJsx: true,
},
},
"expression_statement": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageJavascript: true,
shared.LanguageTsx: true,
shared.LanguageJsx: true,
},
onlyChildren: map[nodeType]bool{
"internal_module": true,
},
},
"ambient_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageTsx: true,
},
},
"interface_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageTsx: true,
},
},
}
var implBoundaryNodeMap = nodeMap{
// Common patterns
"block": {
nodeMatch: matchTypeEqual,
all: true,
except: langSet{
shared.LanguageRuby: true,
shared.LanguageElixir: true,
},
},
"body": {
nodeMatch: matchTypeEqual,
all: true,
},
"_body": {
nodeMatch: matchTypeSuffix,
all: true,
},
"compound_statement": {
nodeMatch: matchTypeEqual,
all: true,
},
// Language-specific boundaries
"do_block": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
shared.LanguageElixir: true,
},
},
"body_statement": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"field_declaration_list": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGo: true,
shared.LanguageC: true,
shared.LanguageCpp: true,
},
},
"property_accessors": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageCsharp: true,
shared.LanguageSwift: true,
},
},
"const_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGo: true,
},
},
"var_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGo: true,
},
},
"method_elem": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageGo: true,
},
},
"preproc_arg": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageC: true,
shared.LanguageCpp: true,
},
},
"statement_block": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageJavascript: true,
shared.LanguageTypescript: true,
shared.LanguageJsx: true,
shared.LanguageTsx: true,
},
},
"declaration_list": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePhp: true,
shared.LanguageCsharp: true,
shared.LanguageRust: true,
},
},
"_declaration_list": {
nodeMatch: matchTypeSuffix,
languages: langSet{
shared.LanguageRust: true,
},
},
"enum_variant_list": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRust: true,
},
},
"=": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageScala: true,
},
},
}
var assignmentBoundaryNodeMap = nodeMap{
"=": {
nodeMatch: matchTypeEqual,
all: true,
},
":=": {
nodeMatch: matchTypeEqual,
all: true,
},
"<-": {
nodeMatch: matchTypeEqual,
all: true,
},
"expression": {
nodeMatch: matchTypeEqual,
all: true,
},
"interface_body": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageTsx: true,
},
},
"declaration_list": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePhp: true,
shared.LanguageCsharp: true,
},
},
"_declaration_list": {
nodeMatch: matchTypeSuffix,
languages: langSet{
shared.LanguagePhp: true,
shared.LanguageCsharp: true,
},
},
"lambda_literal": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageKotlin: true,
},
},
"arguments": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageElixir: true,
},
},
"eq": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageElm: true,
},
},
"statements": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageSwift: true,
},
},
}
var assignmentBoundarySkipForwardNodeMap = nodeMap{
"=": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageJavascript: true,
shared.LanguageTsx: true,
shared.LanguageJsx: true,
},
skipForward: map[nodeType]bool{
"statement_block": true,
"=>": true,
},
},
}
var identifierNodeMap = nodeMap{
// Common patterns
"identifier": {
nodeMatch: matchTypeEqual,
all: true,
},
"_identifier": {
nodeMatch: matchTypeSuffix,
all: true,
},
// Language-specific identifiers
"constant": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageRuby: true,
},
},
"name": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguagePhp: true,
},
},
"bare_key": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageToml: true,
shared.LanguageYaml: true,
},
},
}
var passThroughParentNodeMap = nodeMap{
"template_declaration": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageCpp: true,
},
},
"export_statement": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageJavascript: true,
shared.LanguageTsx: true,
shared.LanguageJsx: true,
},
},
"expression_statement": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageTypescript: true,
shared.LanguageJavascript: true,
shared.LanguageTsx: true,
shared.LanguageJsx: true,
},
onlyChildren: map[nodeType]bool{
"internal_module": true,
},
},
}
var includeAndContinueNodeMap = nodeMap{
"template_parameter_list": {
nodeMatch: matchTypeEqual,
languages: langSet{
shared.LanguageCpp: true,
},
},
}