Skip to content

Commit 714ecda

Browse files
committed
build: make tree-sitter-java a build dependency rather than runtime
1 parent 2e647db commit 714ecda

File tree

7 files changed

+53
-41
lines changed

7 files changed

+53
-41
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
]
5353
},
5454
"dependencies": {
55-
"tree-sitter-java-orchard": "0.5.4",
5655
"web-tree-sitter": "0.26.6"
5756
},
5857
"devDependencies": {
@@ -69,6 +68,7 @@
6968
"mitata": "^1.0.34",
7069
"mocha": "^11.7.5",
7170
"prettier": "^3.8.1",
71+
"tree-sitter-java-orchard": "0.5.4",
7272
"tsdown": "^0.21.4",
7373
"typescript": "^5.9.3",
7474
"typescript-eslint": "^8.57.1"

scripts/generate-node-types.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,30 @@ export type UnnamedType = ${nodeTypeInfo
6565
6666
export type TypeString = NamedType | UnnamedType;
6767
68+
export const multiFieldsByType: Partial<Record<string, Partial<Record<string, true>>>> = ${JSON.stringify(
69+
nodeTypeInfo.reduce(
70+
(acc, nodeInfo) => {
71+
if ("fields" in nodeInfo && nodeInfo.fields) {
72+
const multiFields = Object.entries(nodeInfo.fields)
73+
.filter(([, { multiple }]) => multiple)
74+
.reduce(
75+
(fieldAcc, [name]) => {
76+
fieldAcc[name] = true;
77+
return fieldAcc;
78+
},
79+
{} as Record<string, boolean>
80+
);
81+
82+
if (Object.keys(multiFields).length > 0) {
83+
acc[nodeInfo.type] = multiFields;
84+
}
85+
}
86+
return acc;
87+
},
88+
{} as Record<string, Record<string, boolean>>
89+
)
90+
)};
91+
6892
export type SyntaxNode = ErrorNode | ${nodeTypeInfo
6993
.filter(({ type }) => !type.endsWith("_comment"))
7094
.map(getTypeExprFromRef)

src/node-types.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,22 @@ export type UnnamedType =
318318

319319
export type TypeString = NamedType | UnnamedType;
320320

321+
export const multiFieldsByType: Partial<
322+
Record<string, Partial<Record<string, true>>>
323+
> = {
324+
array_creation_expression: { dimensions: true },
325+
cast_expression: { type: true },
326+
constant_declaration: { declarator: true },
327+
exports_module_directive: { modules: true },
328+
field_declaration: { declarator: true },
329+
for_statement: { init: true, update: true },
330+
local_variable_declaration: { declarator: true },
331+
opens_module_directive: { modules: true },
332+
provides_module_directive: { provider: true },
333+
requires_module_directive: { modifiers: true },
334+
spread_parameter: { annotations: true }
335+
};
336+
321337
export type SyntaxNode =
322338
| ErrorNode
323339
| LiteralNode

src/parser.ts

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import type Prettier from "prettier";
2-
import nodeTypeInfo from "tree-sitter-java-orchard/src/node-types.json" with { type: "json" };
32
import { Language, Parser, type Node } from "web-tree-sitter";
43
import { determinePrettierIgnoreRanges } from "./comments.ts";
5-
import { SyntaxType, type CommentNode, type SyntaxNode } from "./node-types.ts";
4+
import {
5+
multiFieldsByType,
6+
SyntaxType,
7+
type CommentNode,
8+
type SyntaxNode
9+
} from "./node-types.ts";
610

711
export default {
812
async parse(text) {
@@ -44,18 +48,6 @@ const parser = (async () => {
4448
return parser;
4549
})();
4650

47-
const multipleFieldsByType = nodeTypeInfo.reduce((map, nodeInfo) => {
48-
if ("fields" in nodeInfo && nodeInfo.fields) {
49-
const fields = Object.entries(nodeInfo.fields)
50-
.filter(([, { multiple }]) => multiple)
51-
.map(([name]) => name);
52-
if (fields.length) {
53-
map.set(nodeInfo.type, new Set(fields));
54-
}
55-
}
56-
return map;
57-
}, new Map<string, Set<string>>());
58-
5951
function processTree(
6052
node: Node,
6153
fieldName: string | null = null,
@@ -92,8 +84,10 @@ function processTree(
9284
return javaNode;
9385
}
9486

95-
const multipleFields = multipleFieldsByType.get(node.type);
96-
multipleFields?.forEach(name => (javaNode[`${name}Nodes`] = []));
87+
const multiFields = multiFieldsByType[node.type];
88+
if (multiFields) {
89+
Object.keys(multiFields).forEach(name => (javaNode[`${name}Nodes`] = []));
90+
}
9791

9892
node.children.forEach((child, index) => {
9993
const { type, text: value, startPosition, endPosition } = child;
@@ -125,7 +119,7 @@ function processTree(
125119
}
126120

127121
if (fieldName) {
128-
if (multipleFields?.has(fieldName)) {
122+
if (multiFields?.[fieldName]) {
129123
javaNode[`${fieldName}Nodes`].push(javaChild);
130124
} else {
131125
javaNode[`${fieldName}Node`] = javaChild;

tsconfig.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
"noImplicitThis": false,
99
"module": "esnext",
1010
"moduleResolution": "node",
11-
"resolveJsonModule": true,
1211
"rewriteRelativeImportExtensions": true
1312
},
1413
"include": ["src"]

website/docusaurus.config.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,8 @@ export default {
9797
? {}
9898
: {
9999
fallback: {
100-
fs: false,
101100
"fs/promises": false,
102-
module: false,
103-
os: false,
104-
path: false
101+
module: false
105102
}
106103
},
107104
externals: isServer

website/yarn.lock

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6618,11 +6618,6 @@ no-case@^3.0.4:
66186618
lower-case "^2.0.2"
66196619
tslib "^2.0.3"
66206620

6621-
node-addon-api@^8.3.1:
6622-
version "8.6.0"
6623-
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.6.0.tgz#b22497201b465cd0a92ef2c01074ee5068c79a6d"
6624-
integrity sha512-gBVjCaqDlRUk0EwoPNKzIr9KkS9041G/q31IBShPs1Xz6UTA+EXdZADbzqAJQrpDRq71CIMnOP5VMut3SL0z5Q==
6625-
66266621
node-emoji@^2.1.0:
66276622
version "2.2.0"
66286623
resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0"
@@ -6633,11 +6628,6 @@ node-emoji@^2.1.0:
66336628
emojilib "^2.4.0"
66346629
skin-tone "^2.0.0"
66356630

6636-
node-gyp-build@^4.8.4:
6637-
version "4.8.4"
6638-
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8"
6639-
integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==
6640-
66416631
node-releases@^2.0.27:
66426632
version "2.0.36"
66436633
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.36.tgz#99fd6552aaeda9e17c4713b57a63964a2e325e9d"
@@ -8686,14 +8676,6 @@ tree-dump@^1.0.3, tree-dump@^1.1.0:
86868676
resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4"
86878677
integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==
86888678

8689-
tree-sitter-java-orchard@0.5.4:
8690-
version "0.5.4"
8691-
resolved "https://registry.yarnpkg.com/tree-sitter-java-orchard/-/tree-sitter-java-orchard-0.5.4.tgz#8c698a57566ff99ce979bf3f53a313f0f7888eec"
8692-
integrity sha512-MpEi4ic9ksqU9CerMt0XXxOJN5CfDsosGrop++4z6Z9XRkT86bu+I/7LCNJS0rrvA5SoY2t98icBeotSaTtY4A==
8693-
dependencies:
8694-
node-addon-api "^8.3.1"
8695-
node-gyp-build "^4.8.4"
8696-
86978679
trim-lines@^3.0.0:
86988680
version "3.0.1"
86998681
resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"

0 commit comments

Comments
 (0)