Skip to content
This repository was archived by the owner on Sep 9, 2025. It is now read-only.
Merged
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# How package structure is modeled

_This is WIP and only contains links to the example, no explanation yet._

An [example](package-structure/example.js) test shows a basic setup with a package `foo` exporting a function `foo`, and a package `bar` depending on `foo` and importing the function.

The stack graph for this example looks as follows:

![stack graph for example](package-structure/example.png)

_Generate this yourself by running `cargo run --features cli -- test --save-graph='%d/%n.html' --output-mode=always docs/package-structure/example.js`._
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/* --- path: foo/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=54EA007B --- */

{
"name": "foo"
}

/* --- path: foo/index.js --- */
/* --- global: FILE_PATH=index.js --- */
/* --- global: PROJECT_NAME=54EA007B --- */

export function foo() {}

/* --- path: bar/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=202D9AA4 --- */

{
"name": "bar",
"dependencies": {
"foo": ""
}
}

/* --- path: bar/index.js --- */
/* --- global: FILE_PATH=index.js --- */
/* --- global: PROJECT_NAME=202D9AA4 --- */

import { foo } from "foo"
// ^ defined: 13
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ impl FileAnalyzer for NpmPackageAnalyzer {
EXPORTS_GUARD,
"exports_guard_pop",
);
set_edge_precedence(graph, pkg_name_pop, exports_guard_pop, 1);
let main = Some(npm_pkg.main)
.filter(|main| !main.is_empty())
.and_then(|main| NormalizedRelativePath::from_str(&main))
Expand Down
12 changes: 0 additions & 12 deletions languages/tree-sitter-stack-graphs-javascript/rust/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,18 +61,6 @@ pub fn add_edge(graph: &mut StackGraph, from: Handle<Node>, to: Handle<Node>, pr
graph.add_edge(from, to, precedence);
}

pub fn set_edge_precedence(
graph: &mut StackGraph,
from: Handle<Node>,
to: Handle<Node>,
precedence: i32,
) {
if from == to {
return;
}
graph.set_edge_precedence(from, to, precedence);
}

pub fn add_module_pops(
graph: &mut StackGraph,
file: Handle<File>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -348,10 +348,6 @@ inherit .return_or_yield
edge module_pop_end -> prog_exports_pop
edge prog_exports_pop -> @prog.exports

; allow direct access from the package to the modules exports
; this is used from package.json
edge @prog.pkg_pop -> prog_exports_pop

;; builtin types
node @prog.builtins_number
node @prog.builtins_string
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,3 @@
/* --- path: foo/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=foo --- */

{
"name": "foo",
"version": "1.0"
}

/* --- path: foo/src/index.js --- */
/* --- global: FILE_PATH=src/index.js --- */
/* --- global: PROJECT_NAME=foo --- */

export let x;

/* --- path: acme_foo/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=acme_foo --- */
Expand All @@ -23,14 +8,14 @@ export let x;
"main": "./api"
}

/* --- path: acme_foo/core.js --- */
/* --- global: FILE_PATH=core.js --- */
/* --- path: acme_foo/api.js --- */
/* --- global: FILE_PATH=api.js --- */
/* --- global: PROJECT_NAME=acme_foo --- */

export let x;

/* --- path: acme_foo/api.js --- */
/* --- global: FILE_PATH=api.js --- */
/* --- path: acme_foo/core.js --- */
/* --- global: FILE_PATH=core.js --- */
/* --- global: PROJECT_NAME=acme_foo --- */

export let x;
Expand All @@ -42,7 +27,6 @@ export let x;
{
"name": "bar",
"dependencies": {
"foo": "1",
"@acme/foo": "1"
}
}
Expand All @@ -51,11 +35,5 @@ export let x;
/* --- global: FILE_PATH=app.js --- */
/* --- global: PROJECT_NAME=bar --- */

import { x } from "@acme/foo"
// ^ defined: 36

import { x } from "foo"
// ^ defined: 14

import { x } from "@acme/foo/core"
// ^ defined: 30
// ^ defined: 21
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/* --- path: foo/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=foo --- */

{
"name": "foo",
"version": "1.0"
}

/* --- path: foo/impl.js --- */
/* --- global: FILE_PATH=impl.js --- */
/* --- global: PROJECT_NAME=foo --- */

export let x;

/* --- path: bar/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=bar --- */

{
"name": "bar",
"dependencies": {
"foo": "1"
}
}

/* --- path: bar/app.js --- */
/* --- global: FILE_PATH=app.js --- */
/* --- global: PROJECT_NAME=bar --- */

import { x } from "foo"
// ^ defined:
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/* --- path: acme_foo/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=acme_foo --- */

{
"name": "@acme/foo",
"version": "1.0",
"main": "./api"
}

/* --- path: acme_foo/api.js --- */
/* --- global: FILE_PATH=api.js --- */
/* --- global: PROJECT_NAME=acme_foo --- */

export let x;

/* --- path: acme_foo/core.js --- */
/* --- global: FILE_PATH=core.js --- */
/* --- global: PROJECT_NAME=acme_foo --- */

export let x;

/* --- path: bar/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=bar --- */

{
"name": "bar",
"dependencies": {
"@acme/foo": "1"
}
}

/* --- path: bar/app.js --- */
/* --- global: FILE_PATH=app.js --- */
/* --- global: PROJECT_NAME=bar --- */

import { x } from "@acme/foo"
// ^ defined: 15
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/* --- path: foo/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=foo --- */

{
"name": "foo",
"version": "1.0"
}

/* --- path: foo/index.js --- */
/* --- global: FILE_PATH=index.js --- */
/* --- global: PROJECT_NAME=foo --- */

export let x;

/* --- path: foo/impl.js --- */
/* --- global: FILE_PATH=impl.js --- */
/* --- global: PROJECT_NAME=foo --- */

export let x;

/* --- path: bar/package.json --- */
/* --- global: FILE_PATH=package.json --- */
/* --- global: PROJECT_NAME=bar --- */

{
"name": "bar",
"dependencies": {
"foo": "1"
}
}

/* --- path: bar/app.js --- */
/* --- global: FILE_PATH=app.js --- */
/* --- global: PROJECT_NAME=bar --- */

import { x } from "foo"
// ^ defined: 14