Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 8 additions & 0 deletions desloppify/languages/_framework/treesitter/_specs.py
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,10 @@
import_query="""
(import_statement
source: (string (string_fragment) @path)) @import
(call_expression
function: (identifier) @require_fn
arguments: (arguments (string (string_fragment) @path))
(#eq? @require_fn "require")) @import
""",
resolve_import=resolve_js_import,
class_query="""
Expand Down Expand Up @@ -723,6 +727,10 @@
import_query="""
(import_statement
source: (string (string_fragment) @path)) @import
(call_expression
function: (identifier) @require_fn
arguments: (arguments (string (string_fragment) @path))
(#eq? @require_fn "require")) @import
""",
resolve_import=resolve_js_import,
class_query="""
Expand Down
29 changes: 29 additions & 0 deletions desloppify/tests/lang/common/test_treesitter.py
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,35 @@ def test_go_dep_graph(self, tmp_path):
assert str(pkg_file) in main_imports
_GO_MODULE_CACHE.clear()

def test_js_dep_graph_includes_commonjs_require(self, tmp_path):
from desloppify.languages._framework.treesitter._imports import (
ts_build_dep_graph,
)
from desloppify.languages._framework.treesitter._specs import JS_SPEC

src_dir = tmp_path / "src"
src_dir.mkdir()
main_file = src_dir / "app.js"
dep_file = src_dir / "values.js"

main_file.write_text(
"const values = require('./values');\n"
"const _ = require('lodash');\n"
"logger('./not-an-import');\n"
"module.exports = values;\n"
)
dep_file.write_text("module.exports = [1, 2, 3];\n")

graph = ts_build_dep_graph(
tmp_path, JS_SPEC, [str(main_file), str(dep_file)]
)
assert len(graph) == 2
main_imports = graph[str(main_file)]["imports"]
# The relative require edge is kept.
assert str(dep_file) in main_imports
# The npm package and the non-require call do not create edges.
assert len(main_imports) == 1

def test_no_import_query_returns_empty(self, tmp_path):
from desloppify.languages._framework.treesitter._imports import (
ts_build_dep_graph,
Expand Down