diff --git a/package-lock.json b/package-lock.json index 545a5f2..4c81fb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "extension-test-runner", - "version": "0.0.3", + "version": "0.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "extension-test-runner", - "version": "0.0.3", + "version": "0.0.4", "dependencies": { "@jridgewell/trace-mapping": "^0.3.19", "acorn-loose": "^8.3.0", @@ -14,14 +14,13 @@ "data-uri-to-buffer": "^6.0.1", "enhanced-resolve": "^5.15.0", "error-stack-parser": "^2.1.4", - "estraverse": "^5.3.0", + "eslint-visitor-keys": "^3.4.3", "minimatch": "^9.0.3", "split2": "^4.2.0", "stacktrace-parser": "^0.1.10" }, "devDependencies": { "@types/chai": "^4.3.7", - "@types/estraverse": "^5.1.4", "@types/estree": "^1.0.2", "@types/glob": "^8.1.0", "@types/mocha": "^10.0.2", @@ -505,15 +504,6 @@ "integrity": "sha512-/k+vesl92vMvMygmQrFe9Aimxi6oQXFUX9mA5HanTrKUSAMoLauSi6PNFOdRw0oeqilaW600GNx2vSaT2f8aIQ==", "dev": true }, - "node_modules/@types/estraverse": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/estraverse/-/estraverse-5.1.4.tgz", - "integrity": "sha512-vWk/Pr08mWnzh2ckEqt4JEYCZcjJ1Tb0pJcNs4lRX660NbON2bKPN6busy+8TzUzV0AhLEOHphK8W+KBZtZ8kQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", @@ -1226,12 +1216,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/fill-range": { diff --git a/package.json b/package.json index 1095d40..0dc59cd 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "displayName": "Extension Test Runner", "description": "Runs tests in VS Code extensions", "publisher": "ms-vscode", - "version": "0.0.3", + "version": "0.0.4", "icon": "icon.png", "engines": { "vscode": "^1.83.0" @@ -102,7 +102,6 @@ }, "devDependencies": { "@types/chai": "^4.3.7", - "@types/estraverse": "^5.1.4", "@types/estree": "^1.0.2", "@types/glob": "^8.1.0", "@types/mocha": "^10.0.2", @@ -133,7 +132,7 @@ "data-uri-to-buffer": "^6.0.1", "enhanced-resolve": "^5.15.0", "error-stack-parser": "^2.1.4", - "estraverse": "^5.3.0", + "eslint-visitor-keys": "^3.4.3", "minimatch": "^9.0.3", "split2": "^4.2.0", "stacktrace-parser": "^0.1.10" diff --git a/src/extract/syntax.ts b/src/extract/syntax.ts index 072a25d..230a86b 100644 --- a/src/extract/syntax.ts +++ b/src/extract/syntax.ts @@ -4,7 +4,7 @@ import type { Options } from 'acorn'; import { parse } from 'acorn-loose'; -import { traverse } from 'estraverse'; +import * as evk from 'eslint-visitor-keys'; import { Node } from 'estree'; import { IParsedNode, ITestSymbols, NodeKind } from '.'; @@ -32,6 +32,30 @@ const getStringish = (nameArg: Node | undefined): string | undefined => { } }; +const traverse = ( + node: Node, + visitor: { enter: (node: Node) => void; leave: (node: Node) => void }, +) => { + if (!node) { + return; + } + visitor.enter(node); + + const keys = evk.KEYS[node.type]; + if (keys) { + for (const key of keys) { + const child = (node as unknown as Record)[key]; + if (child instanceof Array) { + child.forEach((c) => traverse(c, visitor)); + } else if (child) { + traverse(child, visitor); + } + } + } + + visitor.leave(node); +}; + export const extractWithAst = (text: string, symbols: ITestSymbols) => { const ast = parse(text, acornOptions); diff --git a/src/metadata.ts b/src/metadata.ts index e4c0f5f..afed870 100644 --- a/src/metadata.ts +++ b/src/metadata.ts @@ -2,7 +2,6 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import * as path from 'path'; import * as vscode from 'vscode'; export const enum ItemType { @@ -46,7 +45,7 @@ export function* getContainingItemsForFile( const item = ctrl.createTestItem( filePath[i], filePath[i], - uri.with({ path: filePath.slice(0, i + 1).join(path.sep) }), + uri.with({ path: filePath.slice(0, i + 1).join('/') }), ); item.tags = createOpts.tags; testMetadata.set(