Skip to content

Commit 6fd70a8

Browse files
committed
Now with ESLint!
1 parent 8897e37 commit 6fd70a8

File tree

9 files changed

+61
-59
lines changed

9 files changed

+61
-59
lines changed

.eslintrc.json

Lines changed: 0 additions & 30 deletions
This file was deleted.

bun.lockb

28 KB
Binary file not shown.

eslint.config.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// @ts-check
2+
3+
import eslint from '@eslint/js';
4+
import tseslint from 'typescript-eslint';
5+
6+
export default tseslint.config(
7+
eslint.configs.recommended,
8+
...tseslint.configs.recommended,
9+
{
10+
ignores: ["dist/*", "webview-content/*", "src/frontend"],
11+
12+
},
13+
{
14+
rules: {
15+
"@typescript-eslint/no-unused-vars": [
16+
"error", // or "error"
17+
{
18+
"argsIgnorePattern": "^_",
19+
"varsIgnorePattern": "^_",
20+
"caughtErrorsIgnorePattern": "^_"
21+
}
22+
]
23+
}
24+
}
25+
26+
);

package.json

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"main": "./dist/vscode/extension.cjs",
33
"module": "index.ts",
4+
"type": "module",
45
"dependencies": {
56
"@hpcc-js/wasm-graphviz": "^1.3.0",
67
"@types/vscode": "^1.86.0",
@@ -10,21 +11,24 @@
1011
"web-tree-sitter": "^0.23.0"
1112
},
1213
"devDependencies": {
14+
"@eslint/js": "^9.9.1",
15+
"@rollup/plugin-wasm": "^6.2.2",
16+
"@sveltejs/vite-plugin-svelte": "^3.1.1",
1317
"@types/bun": "latest",
18+
"@types/eslint__js": "^8.42.3",
1419
"@vscode/vsce": "^3.0.0",
1520
"esbuild": "^0.20.0",
1621
"esbuild-plugin-copy": "^2.1.1",
17-
"@rollup/plugin-wasm": "^6.2.2",
18-
"@sveltejs/vite-plugin-svelte": "^3.1.1",
22+
"eslint": "^9.9.1",
1923
"svelte": "^4.2.18",
2024
"tree-sitter-cli": "^0.23.0",
21-
"vite": "^5.4.1",
22-
"tree-sitter-go": "^0.23.0"
25+
"tree-sitter-go": "^0.23.0",
26+
"typescript-eslint": "^8.4.0",
27+
"vite": "^5.4.1"
2328
},
2429
"peerDependencies": {
25-
"typescript": "^5.0.0"
30+
"typescript": "^5.5.4"
2631
},
27-
"type": "module",
2832
"scripts": {
2933
"dev": "echo 'Open this directory in VSCode and then run your extension with F5 or `Run and Debug > Run Extension`!'",
3034
"build": "bun run ./scripts/build-with-esbuild.ts",

scripts/watch-with-esbuild.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ import config from "./esbuild.config";
44
try {
55
const context = await esbuild.context(config);
66
await context.watch();
7-
} catch (e) {
7+
} catch (_e) {
88
process.exit(1);
99
}

src/control-flow/cfg.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,10 @@ export class CFGBuilder {
160160
return this.processForStatement(node);
161161
case 'expression_switch_statement':
162162
return this.processSwitchStatement(node);
163-
case 'return_statement':
163+
case 'return_statement': {
164164
const returnNode = this.addNode('RETURN', node.text);
165165
return { entry: returnNode, exit: null };
166+
}
166167
case 'break_statement':
167168
return this.processBreakStatement(node);
168169
case 'continue_statement':
@@ -175,16 +176,17 @@ export class CFGBuilder {
175176
return this.processTypeSwitchStatement(node);
176177
case 'select_statement':
177178
return this.processSelectStatement(node);
178-
default:
179+
default: {
179180
const newNode = this.addNode('STATEMENT', node.text);
180181
return { entry: newNode, exit: newNode };
182+
}
181183
}
182184
}
183185

184186
private processSwitchlike(switchlikeSyntax: Parser.SyntaxNode, props: SwitchlikeProps): BasicBlock {
185187
const { nodeType, mergeType, mergeCode, caseName, caseTypeName, caseFieldName } = props;
186188

187-
let blockHandler = new BlockHandler();
189+
const blockHandler = new BlockHandler();
188190
const valueNode = this.addNode(
189191
nodeType,
190192
this.getChildFieldText(switchlikeSyntax, 'value')
@@ -215,7 +217,7 @@ export class CFGBuilder {
215217
previous = { node: caseConditionNode, branchType: "alternative" }
216218
});
217219

218-
let defaultCase = switchlikeSyntax.namedChildren.find(child => child.type === 'default_case');
220+
const defaultCase = switchlikeSyntax.namedChildren.find(child => child.type === 'default_case');
219221
if (defaultCase !== undefined) {
220222
const defaultBlock = blockHandler.update(this.processStatements(defaultCase.namedChildren));
221223
this.addEdge(previous.node, defaultBlock.entry, previous.branchType);
@@ -262,24 +264,24 @@ export class CFGBuilder {
262264
});
263265
}
264266
private processGotoStatement(gotoSyntax: Parser.SyntaxNode): BasicBlock {
265-
let name = gotoSyntax.firstNamedChild.text;
266-
let gotoNode = this.addNode('GOTO', name);
267+
const name = gotoSyntax.firstNamedChild.text;
268+
const gotoNode = this.addNode('GOTO', name);
267269
return { entry: gotoNode, exit: null, gotos: [{ node: gotoNode, label: name }] }
268270
}
269271
private processLabeledStatement(labelSyntax: Parser.SyntaxNode): BasicBlock {
270-
let blockHandler = new BlockHandler();
271-
let name = this.getChildFieldText(labelSyntax, "label");
272-
let labelNode = this.addNode("LABEL", name);
272+
const blockHandler = new BlockHandler();
273+
const name = this.getChildFieldText(labelSyntax, "label");
274+
const labelNode = this.addNode("LABEL", name);
273275
console.log("label", labelSyntax.namedChildCount);
274276
const { entry: labeledEntry, exit: labeledExit } = blockHandler.update(this.processBlock(labelSyntax.namedChildren[1]))
275277
if (labeledEntry) this.addEdge(labelNode, labeledEntry)
276278
return blockHandler.update({ entry: labelNode, exit: labeledExit, labels: new Map([[name, labelNode]]) });
277279
}
278-
private processContinueStatement(continueSyntax: Parser.SyntaxNode): BasicBlock {
280+
private processContinueStatement(_continueSyntax: Parser.SyntaxNode): BasicBlock {
279281
const continueNode = this.addNode("CONTINUE", "CONTINUE");
280282
return { entry: continueNode, exit: null, continues: [continueNode] };
281283
}
282-
private processBreakStatement(breakSyntax: Parser.SyntaxNode): BasicBlock {
284+
private processBreakStatement(_breakSyntax: Parser.SyntaxNode): BasicBlock {
283285
const breakNode = this.addNode("BREAK", "BREAK");
284286
return { entry: breakNode, exit: null, breaks: [breakNode] };
285287
}
@@ -307,7 +309,7 @@ export class CFGBuilder {
307309
}
308310

309311
private processIfStatement(ifNode: Node, mergeNode: string | null = null): BasicBlock {
310-
let blockHandler = new BlockHandler();
312+
const blockHandler = new BlockHandler();
311313
const conditionChild = ifNode.childForFieldName('condition');
312314
const conditionNode = this.addNode(
313315
'CONDITION',

src/control-flow/graph-ops.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import { subgraph } from "graphology-operators";
33
import { bfsFromNode } from "graphology-traversal";
44
import type { CFG } from "./cfg";
55

6-
export function distanceFromEntry(cfg: CFG): Map<any, number> {
6+
export function distanceFromEntry(cfg: CFG): Map<string, number> {
77
const { graph, entry } = cfg;
8-
let levels = new Map();
8+
const levels = new Map();
99

1010
bfsFromNode(graph, entry, (node, attr, depth) => {
1111
levels.set(node, depth);
@@ -15,14 +15,14 @@ export function distanceFromEntry(cfg: CFG): Map<any, number> {
1515
}
1616

1717
export type AttrMerger = (nodeAttrs: object, intoAttrs: object) => object;
18-
function collapseNode(graph: MultiDirectedGraph, node: any, into: any, mergeAttrs?: AttrMerger) {
18+
function collapseNode(graph: MultiDirectedGraph, node: string, into: string, mergeAttrs?: AttrMerger) {
1919
graph.forEachEdge(node, (edge, attributes, source, target) => {
2020
if (target === into) {
2121
return;
2222
}
2323

24-
const replaceNode = (n: any) => (n === node ? into : n);
25-
let edgeNodes = [replaceNode(source), replaceNode(target)] as const;
24+
const replaceNode = (n: string) => (n === node ? into : n);
25+
const edgeNodes = [replaceNode(source), replaceNode(target)] as const;
2626
graph.addEdge(...edgeNodes, attributes);
2727
})
2828
if (mergeAttrs) {
@@ -38,9 +38,9 @@ function collapseNode(graph: MultiDirectedGraph, node: any, into: any, mergeAttr
3838
* @param graph The graph to simplify
3939
*/
4040
export function simplifyCFG(cfg: CFG, mergeAttrs?: AttrMerger): CFG {
41-
let graph = cfg.graph.copy();
41+
const graph = cfg.graph.copy();
4242

43-
let toCollapse: string[][] = graph.mapEdges((edge, attrs, source, target) => {
43+
const toCollapse: string[][] = graph.mapEdges((edge, attrs, source, target) => {
4444
if (graph.outDegree(source) === 1 && graph.inDegree(target) === 1) {
4545
return [source, target];
4646
}
@@ -71,7 +71,7 @@ export function simplifyCFG(cfg: CFG, mergeAttrs?: AttrMerger): CFG {
7171

7272
export function trimFor(cfg: CFG): CFG {
7373
const { graph, entry } = cfg;
74-
let reachable: any[] = [];
74+
const reachable: string[] = [];
7575

7676
bfsFromNode(graph, entry, (node) => { reachable.push(node); });
7777

src/control-flow/render.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type { CFG } from "./cfg";
55
export function graphToDot(cfg: CFG, verbose: boolean = false): string {
66
const graph = cfg.graph;
77
let dotContent = `digraph "" {\n node [shape=box];\n edge [headport=n tailport=s]\n bgcolor="transparent"\n`;
8-
let levels = distanceFromEntry(cfg);
8+
const levels = distanceFromEntry(cfg);
99
graph.forEachNode((node) => {
1010

1111
let label = "";

src/vscode/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class OverviewViewProvider implements vscode.WebviewViewProvider {
121121
}
122122

123123

124-
resolveWebviewView(webviewView: vscode.WebviewView, context: vscode.WebviewViewResolveContext, token: vscode.CancellationToken): Thenable<void> | void {
124+
resolveWebviewView(webviewView: vscode.WebviewView, _context: vscode.WebviewViewResolveContext, _token: vscode.CancellationToken): Thenable<void> | void {
125125
this._view = webviewView;
126126

127127
webviewView.webview.options = {

0 commit comments

Comments
 (0)