brokk_bifrost_python/
knowledge.rs1use brokk_bifrost_core::analyzer::CodeUnit;
4use brokk_bifrost_core::analyzer::Language;
5use brokk_bifrost_core::analyzer::ProjectFile;
6use brokk_bifrost_core::analyzer::language_knowledge::LanguageKnowledge;
7use brokk_bifrost_core::analyzer::language_knowledge::ParserFlavor;
8use brokk_bifrost_core::analyzer::project::Project;
9use brokk_bifrost_core::analyzer::structural::spec::StructuralSpec;
10
11pub struct PythonKnowledge;
13
14impl LanguageKnowledge for PythonKnowledge {
15 fn unmarked_member_stores(
16 &self,
17 ) -> brokk_bifrost_core::analyzer::language_knowledge::UnmarkedMemberStores {
18 brokk_bifrost_core::analyzer::language_knowledge::UnmarkedMemberStores::Followable
19 }
20
21 fn declared_type_is_referent_immutable(&self, _canonical_type: &str) -> bool {
22 false
23 }
24
25 fn call_applicability_may_select_callee(&self) -> bool {
28 false
29 }
30
31 fn callable_result_is_applicability_independent(&self) -> bool {
35 true
36 }
37
38 fn external_callee_expansion_requires_receiver_binding(&self) -> bool {
39 true
40 }
41
42 fn exact_external_call_keeps_import_boundary(&self) -> bool {
43 true
44 }
45
46 fn model_declarations_project_runtime_values(&self) -> bool {
47 true
48 }
49
50 fn model_declarations_supply_runtime_bases(&self) -> bool {
51 true
52 }
53
54 fn intrinsic_owners_use_source_member_rules(&self) -> bool {
55 true
56 }
57
58 fn qualified_type_lookups_use_value_namespace(&self) -> bool {
59 true
60 }
61
62 fn callable_expression_type_gap_is_value_only(&self) -> bool {
63 true
64 }
65
66 fn owned_members_are_not_lexically_scoped(&self) -> bool {
67 true
68 }
69
70 fn reassignments_are_one_declaration(&self) -> bool {
71 true
72 }
73
74 fn keyed_property_reads_container_element(&self) -> bool {
75 true
76 }
77
78 fn language(&self) -> Language {
79 Language::Python
80 }
81
82 fn path_synthetic_module_unit(
83 &self,
84 project: &dyn Project,
85 file: &ProjectFile,
86 ) -> Option<CodeUnit> {
87 use crate::declarations::module_code_unit;
88 module_code_unit(project, file)
89 }
90
91 fn parser_language(&self, _flavor: ParserFlavor) -> tree_sitter::Language {
92 tree_sitter_python::LANGUAGE.into()
93 }
94
95 fn structural_spec(&self) -> &'static dyn StructuralSpec {
96 &crate::structural::PYTHON_STRUCTURAL_SPEC
97 }
98
99 fn highlight_query(&self) -> Option<&'static str> {
100 Some(tree_sitter_python::HIGHLIGHTS_QUERY)
101 }
102}