Skip to content

Commit dfbb4db

Browse files
committed
Add support for getting constant symbols
Fix formating tests Signed-off-by: ziad hany <ziadhany2016@gmail.com>
1 parent 1f5dd81 commit dfbb4db

1 file changed

Lines changed: 26 additions & 3 deletions

File tree

scanpipe/pipes/symbols.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ def create_sha256_fingerprint(text):
219219

220220
class LanguageQuery(ABC):
221221
language_name: str = ""
222+
constants_query: str = ""
222223
functions_query: str = ""
223224
classes_query: str = ""
224225
calls_query: str = ""
@@ -233,7 +234,7 @@ def __init__(self):
233234
self.ts_language = load_language(self.language_name)
234235
self._compiled_queries = {}
235236

236-
for kind in ("functions", "classes", "calls", "imports"):
237+
for kind in ("constants", "functions", "classes", "calls", "imports"):
237238
source = getattr(self, f"{kind}_query", "").strip()
238239
self._compiled_queries[kind] = (
239240
Query(self.ts_language, source) if source else None
@@ -319,9 +320,30 @@ def get_imports(self, root_node):
319320

320321
yield module_name, pairs
321322

323+
def get_constants(self, root_node):
324+
"""Yield raw (constant_node, name)."""
325+
for _, captures in self.run_query("constants", root_node):
326+
def_nodes = captures.get("constant")
327+
if not def_nodes:
328+
continue
329+
name_nodes = captures.get("name")
330+
name = (
331+
name_nodes[0].text.decode("utf-8", errors="replace")
332+
if name_nodes
333+
else None
334+
)
335+
yield def_nodes[0], name
336+
322337

323338
class PythonTreeSitterQuery(LanguageQuery):
324339
language_name = "Python"
340+
constants_query = """
341+
(assignment
342+
left: (identifier) @name) @constant
343+
344+
(assignment
345+
left: (pattern_list (identifier) @name)) @constant
346+
"""
325347
functions_query = "(function_definition name: (identifier) @name) @function"
326348
classes_query = "(class_definition name: (identifier) @name) @class"
327349
calls_query = """
@@ -334,15 +356,13 @@ class PythonTreeSitterQuery(LanguageQuery):
334356
(import_statement name: (aliased_import
335357
name: (dotted_name) @import_name
336358
alias: (identifier) @alias))
337-
338359
(import_from_statement
339360
module_name: [(dotted_name) (relative_import)] @module_name
340361
name: [
341362
(dotted_name) @import_name
342363
(aliased_import name: (dotted_name) @import_name
343364
alias: (identifier) @alias)
344365
])
345-
346366
(import_from_statement
347367
module_name: [(dotted_name) (relative_import)] @module_name
348368
(wildcard_import) @import_name)
@@ -387,6 +407,9 @@ def extract_definitions_index(self):
387407
for node, name in self.lang_query.get_classes(self.root_node):
388408
index[node.id] = {"node": node, "name": name, "kind": "classes"}
389409

410+
for node, name in self.lang_query.get_constants(self.root_node):
411+
index[node.id] = {"node": node, "name": name, "kind": "constants"}
412+
390413
for def_info in index.values():
391414
def_info["qualified_name"] = self._build_qualified_name(
392415
def_info["node"], index

0 commit comments

Comments
 (0)