From 81c2eb08c2db3707ce36841eec9b7cf26aa5c85b Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Mon, 13 Mar 2023 20:59:22 +0100 Subject: [PATCH 001/110] docs(vscode): add new intro gif --- packages/vscode/README.md | 2 +- packages/vscode/readme-media/intro.gif | Bin 0 -> 1626442 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 packages/vscode/readme-media/intro.gif diff --git a/packages/vscode/README.md b/packages/vscode/README.md index 9e9010a..7bf4a5f 100644 --- a/packages/vscode/README.md +++ b/packages/vscode/README.md @@ -33,7 +33,7 @@ Structural search support for other programming languages will be added soon.

Watch extension in action (external link) 👇

- + ## Benefits of using CodeQue VSCode extension diff --git a/packages/vscode/readme-media/intro.gif b/packages/vscode/readme-media/intro.gif new file mode 100644 index 0000000000000000000000000000000000000000..330a33969b73c0a47d71c5275d55d886642bad44 GIT binary patch literal 1626442 zcmW(+byU>P*Zzo0ih#6AyL5JMF6{e# zfB(&yb92s}bM8F%8Cf|Qq4%Z$_5{`q{Tl!PzyJUN02lzk0RRaAC;&kJZx;*(AYcFn z2H;=-2?kJL0R2BvFa&@=02l;-LjWWMKtTZX|MbBy00IMGFaQn%kT3uR1JM673Wfs^ zH~@nKa5#X311LCv{+}l>5`Z897!rUZ0VEPYAp!LN+=Ed71O>oQ02~D%Q2+`Bp#K*W z7!5$s01OSl(Et(+pwIyN{{w}B0Vo83!T=~7fFc1X3V@;kC;*0n!B7Yo3IjvoU?>s{ zMS-DcFcg45!4N0}0);`Ka0nC$fubN#Gz1F3pkNpj0)xU}P&f>Vgh5d-C>jO@;7~9e z3V}mma3~xOMZ%#dI1~+s0!Szr356h`FeDU?gd&kp6cUO?LID&MjDkW?P#6jdM?sM& zC<+Bdqo4p93PwXAXebN~g`=TJG!%t~qR~(QK!5=R1VF$51ROvh0R##_paBE`Mu5Qx z2p9naBj8{J5{y8B5oj<1fFQsS1O$SBK@e~V0trE&AP6)B0l*Mo7y<%Az+ebC41t6p zP%s1~cAQ3Pm0**u=kq8tLfkq+#6atJw zKu`!63IRtUkSGKSg+QYa02%>CBOqu542^)J5lA!wg+`#!2mru<0SpAdzyJ&!z#st( z3c#QN3;@P}!59b_0|R5=Ui*y7&r`rgkexH3>t<3;21C*1A${;a10!dLBcU8I0g;J07wiNiGd(7FeCv?7L}q1R*02 z7bMZNFNTueY_Y8N)j$HBWH1eT9eC&~i$;M#c^&hwG#>NrEcSYq(M-Y5>x=VmOr>+5 z`4aTuxtaABJPjlgZqa0)ED_I@xBM`}K2xDpzrQ$K&pB6P)Duk0*}yelZ#7+D$T^$W z)#$j?StF?T$RFHyua`D$#Rb;hJL*Llh^r9;%g(i^!w}UgN>ISDzp!N zcl##?Xc0%EbMFLWsd1L>HO+1xqkJF9c7fDKGfno7>eeQZ2|@Ac-<6Kb+n* za?J!%Zpoz2mQ!XH%~ic?7Q@@YW*#drW@8>Fv|MH$|LJ(wJVES%%>pjvN}eJqD<4{< zCjXZ_-9B7=C_Pz)M~2y0dpl*zK}~PZGR;K!t~lLPOP3|pJVS0f!>%D}`rPt*5>`ZeA@>;AuHP*jKk6 zcKkVRJGZlc-FUlP;naaXK5*&;F!q~<9u$hFKe36e{un=*?*DG_^xyS&vu9-QYP(6S z6>Iycoeo_F7>v2b$zVbm3#xQG7tHNU)P{re(}z6eI8`*)Y^r8d^ddIBK+!a zy`wnm2jrL-s}gbwQplR)ty0SB{#)~-!`t85D%tKcI%!n=zuu422#y)Y7z)k{hWHDP zzN@eDSg`7e^Y~-lO8aifey+-M+3y#|;bzfk~}h|BhR3 za(1`73OU*k*~G@5&VIgf@;g@=J8nCi7~l~;nie(ozx-|O)P9X}I`O|*HGVB}6K?7l zu)R~7(4lbFKz#D=vV~q0eKl+>dVgJ0^YHNZW*mcgc*3wwC?gj7oYyp1!DN-v>m3eO z^%oMqJP<}kyqldjnBwpcHmi*|F2SfZ13C{cj#7d&{<{sE#loZ(UUyaVcYD2%d^d8E zo)@m8;jer12{Y?|5)vtg5M7!QV?IWTGr5vPN=vOj3moiab=#WApN2)E%LIMDMU`uh+rzc1;oM^ z=&fk^q5fN-Trhc&E!xLDZEGwL!b`-LS6-wiDBe$7%0A*sKdJ{$%iMxlrMt3z7>EtJ>G0U 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%0Dthe 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 z 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

KaX)- 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≤p}KwKt=tAINX*#AP4D}@VA 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

%1ljRIcT!inB@Y0*k24@sUY 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

?*4DN#+d1pT&l#xIwLUOA_%JRlc)Ha02$ZIj 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

CrO99ryO{_Yjox2 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%0ATT#3g;h1`V;A!h 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

r%lt+N7hi+ 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

*ix=%SAW>gQvQDvHr&kiHh^Yg-VI>0^*; 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 Z9yaP%`FcHZ7BDp5tS`3}4Gl%;e*k<8jQs!r literal 0 HcmV?d00001 From d7e4f359c20aa4467b7ad5a146e2fdf76c3527ae Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Mon, 13 Mar 2023 21:06:22 +0100 Subject: [PATCH 002/110] docs(vscode): add new intro gif 2 --- packages/vscode/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vscode/README.md b/packages/vscode/README.md index 7bf4a5f..1eec413 100644 --- a/packages/vscode/README.md +++ b/packages/vscode/README.md @@ -30,7 +30,7 @@ Structural search support for other programming languages will be added soon.
-

Watch extension in action (external link) 👇

+

Click to watch extension in action 👇

From b785de8981f570c74b7723f4943b7d3f3a07a602 Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Mon, 13 Mar 2023 22:24:55 +0100 Subject: [PATCH 003/110] fix: file name ellipsis --- packages/vscode/package.json | 2 +- .../src/webviews/SearchResultsPanel/components/FileGroup.tsx | 2 ++ .../webviews/SearchResultsPanel/components/WorkspaceGroup.tsx | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 4a47137..8d8c98b 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -10,7 +10,7 @@ "bugs": { "url": "https://github.com/codeque-co/codeque/issues" }, - "version": "0.21.0", + "version": "0.21.1", "engines": { "vscode": "^1.68.0", "node": ">=14" diff --git a/packages/vscode/src/webviews/SearchResultsPanel/components/FileGroup.tsx b/packages/vscode/src/webviews/SearchResultsPanel/components/FileGroup.tsx index fa7d9e8..86e8865 100644 --- a/packages/vscode/src/webviews/SearchResultsPanel/components/FileGroup.tsx +++ b/packages/vscode/src/webviews/SearchResultsPanel/components/FileGroup.tsx @@ -89,6 +89,7 @@ export function FileGroup({ height={groupHeaderHeight} alignItems="center" ref={headingRef} + maxWidth="100%" > { @@ -113,6 +114,7 @@ export function FileGroup({ onClick={() => { setIsResultFocused(true) }} + maxWidth="calc(100% - 110px)" /> diff --git a/packages/vscode/src/webviews/SearchResultsPanel/components/WorkspaceGroup.tsx b/packages/vscode/src/webviews/SearchResultsPanel/components/WorkspaceGroup.tsx index 5720ffb..1709413 100644 --- a/packages/vscode/src/webviews/SearchResultsPanel/components/WorkspaceGroup.tsx +++ b/packages/vscode/src/webviews/SearchResultsPanel/components/WorkspaceGroup.tsx @@ -55,6 +55,7 @@ export function WorkspaceGroup({ height={groupHeaderHeight} alignItems="center" ref={headingRef} + maxWidth="100%" > { @@ -71,7 +72,7 @@ export function WorkspaceGroup({ {...iconButtonStyleResetProps} mr="2" /> - + {workspace} ({allCount}) From 7720948c513cedfb19e7ff3e3cadab6673b25edb Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Thu, 22 Jun 2023 19:57:08 +0200 Subject: [PATCH 004/110] Revert "docs(vscode): remove some of the keywords" This reverts commit 636bd644f0870c26e87a3705b4d5a661ff5d8ab3. --- packages/vscode/package.json | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 8d8c98b..cbaed3a 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -21,14 +21,31 @@ "keywords": [ "typescript", "javascript", + "json", "search", "find", "match", - "multiline", + "pattern", + "matching", + "ast", + "regexp", + "semantic", + "static", + "analysis", "structural", + "syntax", + "multiline", + "refactor", + "refactoring", "replace", - "regexp", - "json" + "rewrite", + "rewriting", + "navigation", + "multiline search", + "structural search", + "search and replace", + "regexp search", + "json search" ], "activationEvents": [ "onStartupFinished" From 5bf852706b606d7e7d4372d11612eff69cdd3d1c Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Thu, 22 Jun 2023 19:59:58 +0200 Subject: [PATCH 005/110] docs(vscode): update extension name, keywords and categories --- packages/vscode/InternalReadme.md | 10 +- packages/vscode/README.md | 7 +- packages/vscode/package.json | 349 +++++++++++++++--------------- 3 files changed, 187 insertions(+), 179 deletions(-) diff --git a/packages/vscode/InternalReadme.md b/packages/vscode/InternalReadme.md index d201b54..af090a9 100644 --- a/packages/vscode/InternalReadme.md +++ b/packages/vscode/InternalReadme.md @@ -8,7 +8,7 @@ While in VSCode with extension host run `> Reload Extension` to refresh webview To refresh extension backed re-run debugger configuration. -## Publish +## Publish to official Visual Studio Code Marketplace Bump version manually in package.json @@ -18,4 +18,10 @@ And just run `vsce` will automatically run pre-publish hooks from script `vscode:prepublish` to run checks and build package -You might be asked to [get new PAT](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#get-a-personal-access-token) \ No newline at end of file +You might be asked to [get new PAT](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#get-a-personal-access-token) + +## Publish to Open VSX registry + +Same procedure as above, but run + +`ovsx publish` diff --git a/packages/vscode/README.md b/packages/vscode/README.md index 1eec413..103a346 100644 --- a/packages/vscode/README.md +++ b/packages/vscode/README.md @@ -12,7 +12,7 @@ Playground

-# CodeQue - Multiline Structural Search for Visual Studio Code +# CodeQue - multiline and structural code search for Visual Studio Code CodeQue is code search engine that understands the code syntax. @@ -24,7 +24,7 @@ Advanced search options and todo-like list of accurate search results makes it y It's one of the tools in the ecosystem. There is also [CLI tool](https://www.npmjs.com/package/@codeque/cli) and [ESLint plugin](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom rules in zero time. -CodeQue supports multiline search for any programming language and structural search for JavaScript and TypeScript. +CodeQue supports multiline code search for any programming language and structural code search for JavaScript and TypeScript. Structural search support for other programming languages will be added soon. @@ -306,6 +306,7 @@ useRequest({ ## Support, Feedback and more +Playground 👉 [codeque.co/playground](https://codeque.co/playground) Bugs, feature requests, help 👉 [Github Issues](https://github.com/codeque-co/codeque/issues) @@ -315,7 +316,5 @@ Roadmap 👉 [codeque.co/roadmap](https://codeque.co/roadmap) Mission 👉 [codeque.co/mission](https://codeque.co/mission) -Playground 👉 [codeque.co/playground](https://codeque.co/playground) - Wanna contribute 👉 [Internal readme](./InternalReadme.md) diff --git a/packages/vscode/package.json b/packages/vscode/package.json index cbaed3a..e486911 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -1,174 +1,177 @@ { - "name": "codeque", - "publisher": "CodeQue", - "displayName": "Multiline Structural Search - CodeQue", - "description": "Multiline search for any language. Structural search for TypeScript and JavaScript", - "repository": { - "type": "git", - "url": "https://github.com/codeque-co/codeque" - }, - "bugs": { - "url": "https://github.com/codeque-co/codeque/issues" - }, - "version": "0.21.1", - "engines": { - "vscode": "^1.68.0", - "node": ">=14" - }, - "categories": [ - "Other" - ], - "keywords": [ - "typescript", - "javascript", - "json", - "search", - "find", - "match", - "pattern", - "matching", - "ast", - "regexp", - "semantic", - "static", - "analysis", - "structural", - "syntax", - "multiline", - "refactor", - "refactoring", - "replace", - "rewrite", - "rewriting", - "navigation", - "multiline search", - "structural search", - "search and replace", - "regexp search", - "json search" - ], - "activationEvents": [ - "onStartupFinished" - ], - "license": "SEE LICENSE IN LICENSE.md", - "main": "./dist/extension.js", - "icon": "media/logoShort_search.png", - "galleryBanner": { - "color": "#f3e2f9", - "theme": "light" - }, - "contributes": { - "viewsContainers": { - "activitybar": [ - { - "id": "codeque-sidebar-view", - "title": "CodeQue", - "icon": "media/logoShort2.png" - } - ] - }, - "views": { - "codeque-sidebar-view": [ - { - "type": "webview", - "id": "codeque-sidebar", - "name": "CodeQue", - "icon": "media/logoShort2.png", - "contextualTitle": "CodeQue" - } - ] - }, - "commands": [ - { - "command": "codeque.searchWithOptionalQuerySelectionFromEditor", - "title": "CQ: Open Search" - }, - { - "command": "codeque.searchByEntryPoint", - "title": "CQ: Search by Entry Point" - }, - { - "command": "codeque.searchInFolder", - "title": "CQ: Search in Folder" - }, - { - "command": "codeque.refresh", - "title": "CQ: Refresh extension" - } - ], - "menus": { - "explorer/context": [ - { - "command": "codeque.searchByEntryPoint", - "group": "4_search", - "when": "!explorerResourceIsFolder" - }, - { - "command": "codeque.searchInFolder", - "group": "4_search", - "when": "explorerResourceIsFolder" - } - ], - "editor/context": [ - { - "group": "navigation", - "command": "codeque.searchWithOptionalQuerySelectionFromEditor", - "when": "editorHasSelection" - }, - { - "group": "navigation", - "command": "codeque.searchByEntryPoint" - } - ] - } - }, - "scripts": { - "vscode:prepublish": "yarn lint && yarn typecheck && yarn run package", - "compile": "webpack", - "watch:extension": "webpack --config webpack.extension.config.js --watch", - "package:extension": "webpack --config webpack.extension.config.js --mode production", - "watch:webviews": "webpack --config webpack.webviews.config.js --watch", - "package:webviews": "webpack --config webpack.webviews.config.js --mode production", - "package": "yarn package:extension && yarn package:webviews", - "compile-tests": "tsc -p . --outDir out", - "watch-tests": "tsc -p . -w --outDir out", - "pretest": "yarn run compile-tests && yarn run compile && yarn run lint", - "lint": "eslint src --ext ts", - "test": "node ./out/test/runTest.js", - "typecheck": "tsc --project tsconfig.json --noEmit" - }, - "devDependencies": { - "@types/glob": "^7.2.0", - "@types/mocha": "^9.1.1", - "@types/node": "16.x", - "@types/vscode": "^1.68.0", - "@typescript-eslint/eslint-plugin": "^5.30.0", - "@typescript-eslint/parser": "^5.30.0", - "@vscode/test-electron": "^2.1.5", - "eslint": "^8.18.0", - "glob": "^8.0.3", - "mocha": "^10.0.0", - "process": "^0.11.10", - "ts-loader": "^9.3.1", - "typescript": "^4.7.4", - "webpack": "^5.73.0", - "webpack-cli": "^4.10.0" - }, - "dependencies": { - "@chakra-ui/react": "^2.2.4", - "@codeque/core": "^0.4.0", - "@emotion/react": "^11.9.3", - "@emotion/styled": "^11.9.3", - "@types/react": "^18.0.15", - "@types/react-dom": "^18.0.6", - "copy-to-clipboard": "^3.3.2", - "dedent": "^0.7.0", - "framer-motion": "^6.5.1", - "prism-react-renderer": "^1.3.5", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-icons": "^4.4.0", - "react-select": "^5.4.0", - "react-simple-code-editor": "^0.11.2" - } -} \ No newline at end of file + "name": "codeque", + "publisher": "CodeQue", + "displayName": "CodeQue - Multiline and Structural Code Search", + "description": "Multiline code search for any language. Structural code search for TypeScript and JavaScript", + "repository": { + "type": "git", + "url": "https://github.com/codeque-co/codeque" + }, + "bugs": { + "url": "https://github.com/codeque-co/codeque/issues" + }, + "version": "0.22.0", + "engines": { + "vscode": "^1.68.0", + "node": ">=14" + }, + "categories": [ + "Programming Languages", + "Linters", + "Snippets", + "Other" + ], + "keywords": [ + "typescript", + "javascript", + "json", + "code search", + "find", + "match", + "multiline", + "structural", + "regexp", + "pattern", + "matching", + "ast", + "semantic", + "static", + "analysis", + "syntax", + "refactor", + "refactoring", + "replace", + "rewrite", + "rewriting", + "navigation", + "multiline search", + "structural search", + "search and replace", + "regexp search", + "json search" + ], + "activationEvents": [ + "onStartupFinished" + ], + "license": "SEE LICENSE IN LICENSE.md", + "main": "./dist/extension.js", + "icon": "media/logoShort_search.png", + "galleryBanner": { + "color": "#f3e2f9", + "theme": "light" + }, + "contributes": { + "viewsContainers": { + "activitybar": [ + { + "id": "codeque-sidebar-view", + "title": "CodeQue", + "icon": "media/logoShort2.png" + } + ] + }, + "views": { + "codeque-sidebar-view": [ + { + "type": "webview", + "id": "codeque-sidebar", + "name": "CodeQue", + "icon": "media/logoShort2.png", + "contextualTitle": "CodeQue" + } + ] + }, + "commands": [ + { + "command": "codeque.searchWithOptionalQuerySelectionFromEditor", + "title": "CQ: Open Search" + }, + { + "command": "codeque.searchByEntryPoint", + "title": "CQ: Search by Entry Point" + }, + { + "command": "codeque.searchInFolder", + "title": "CQ: Search in Folder" + }, + { + "command": "codeque.refresh", + "title": "CQ: Refresh extension" + } + ], + "menus": { + "explorer/context": [ + { + "command": "codeque.searchByEntryPoint", + "group": "4_search", + "when": "!explorerResourceIsFolder" + }, + { + "command": "codeque.searchInFolder", + "group": "4_search", + "when": "explorerResourceIsFolder" + } + ], + "editor/context": [ + { + "group": "navigation", + "command": "codeque.searchWithOptionalQuerySelectionFromEditor", + "when": "editorHasSelection" + }, + { + "group": "navigation", + "command": "codeque.searchByEntryPoint" + } + ] + } + }, + "scripts": { + "vscode:prepublish": "yarn lint && yarn typecheck && yarn run package", + "compile": "webpack", + "watch:extension": "webpack --config webpack.extension.config.js --watch", + "package:extension": "webpack --config webpack.extension.config.js --mode production", + "watch:webviews": "webpack --config webpack.webviews.config.js --watch", + "package:webviews": "webpack --config webpack.webviews.config.js --mode production", + "package": "yarn package:extension && yarn package:webviews", + "compile-tests": "tsc -p . --outDir out", + "watch-tests": "tsc -p . -w --outDir out", + "pretest": "yarn run compile-tests && yarn run compile && yarn run lint", + "lint": "eslint src --ext ts", + "test": "node ./out/test/runTest.js", + "typecheck": "tsc --project tsconfig.json --noEmit" + }, + "devDependencies": { + "@types/glob": "^7.2.0", + "@types/mocha": "^9.1.1", + "@types/node": "16.x", + "@types/vscode": "^1.68.0", + "@typescript-eslint/eslint-plugin": "^5.30.0", + "@typescript-eslint/parser": "^5.30.0", + "@vscode/test-electron": "^2.1.5", + "eslint": "^8.18.0", + "glob": "^8.0.3", + "mocha": "^10.0.0", + "process": "^0.11.10", + "ts-loader": "^9.3.1", + "typescript": "^4.7.4", + "webpack": "^5.73.0", + "webpack-cli": "^4.10.0" + }, + "dependencies": { + "@chakra-ui/react": "^2.2.4", + "@codeque/core": "^0.4.0", + "@emotion/react": "^11.9.3", + "@emotion/styled": "^11.9.3", + "@types/react": "^18.0.15", + "@types/react-dom": "^18.0.6", + "copy-to-clipboard": "^3.3.2", + "dedent": "^0.7.0", + "framer-motion": "^6.5.1", + "prism-react-renderer": "^1.3.5", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-icons": "^4.4.0", + "react-select": "^5.4.0", + "react-simple-code-editor": "^0.11.2" + } +} From 942766a1d5177c31838ae88baf0bd97e4d2bd08a Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Sat, 24 Jun 2023 15:09:19 +0200 Subject: [PATCH 006/110] big-bang-release: tests refactor, support all eslint parsers, support aliasing wildcards --- .gitignore | 2 +- fix-framer-motion.js | 2 +- package.json | 4 +- packages/cli/package.json | 1 + packages/cli/tsconfig.json | 12 +- .../assignmentPattern.test.ts | 87 +- .../matchCodePatterns}/basic.test.ts | 4 +- .../matchCodePatterns}/blocks.test.ts | 110 +- .../matchCodePatterns/functions.test.ts | 141 +++ .../matchCodePatterns/import.test.ts | 172 +++ .../matchCodePatterns}/literals.test.ts | 62 +- .../matchCodePatterns}/multiStatement.test.ts | 252 ++-- .../matchCodePatterns}/objects.test.ts | 265 ++++- .../matchCodePatterns/other.test.ts | 308 +++++ .../JavaScript/other/astUtils.test.ts | 48 + .../JavaScript/other/parseQuery.test.ts | 53 + .../other}/searchInStrings.test.ts | 4 +- .../other/searchWithContext.test.ts | 1051 +++++++++++++++++ .../JavaScript/other/wildcardUtils.test.ts | 434 +++++++ .../matchCodePatterns/JSX.test.ts | 352 ++++++ .../matchCodePatterns/JSX2.test.ts | 317 +++++ .../matchCodePatterns/other.test.ts | 84 ++ .../JavaScriptWithJSX/other/astUtils.test.ts | 150 +++ .../other/parseQuery.test.ts | 55 + .../{search => TextSearch}/textSearch.test.ts | 13 +- .../assignmentPattern.test.ts | 65 + .../functionsAndTypes.test.ts | 242 ++++ .../matchCodePatterns/other.test.ts | 77 ++ .../matchCodePatterns}/types.test.ts | 60 +- .../{ => TypeScript/other}/astUtils.test.ts | 62 +- .../{ => TypeScript/other}/parseQuery.test.ts | 17 +- .../other}/searchMultiThread.test.ts | 14 +- .../searchSmoke}/JSX.test.ts | 337 +----- .../TypeScript/searchSmoke/blocks.test.ts | 79 ++ .../searchSmoke}/codePatterns.test.ts | 24 +- .../searchSmoke}/functions.test.ts | 92 +- .../searchSmoke}/import.test.ts | 20 +- .../searchSmoke/multiStatement.test.ts | 152 +++ .../TypeScript/searchSmoke/objects.test.ts | 33 + .../TypeScript/searchSmoke/other.test.ts | 95 ++ .../__fixturesOther__/textSearch.ts | 0 .../{ => common}/getFilesList.test.ts | 6 +- .../core/__tests__/{ => common}/utils.test.ts | 7 +- packages/core/__tests__/search/other.test.ts | 176 --- packages/core/__tests__/utils.ts | 39 +- packages/core/declarations.d.ts | 2 + packages/core/jest.config.js | 141 ++- packages/core/jest.setup.js | 1 - .../core/jest/babel-eslint-parser.setup.ts | 4 + .../babel-eslint-parser:traversal.setup.ts | 4 + packages/core/jest/babel.setup.ts | 4 + packages/core/jest/babel:traversal.setup.ts | 4 + packages/core/jest/espree.setup.ts | 4 + packages/core/jest/espree:traversal.setup.ts | 4 + packages/core/jest/esprima.setup.ts | 4 + packages/core/jest/esprima:traversal.setup.ts | 4 + packages/core/jest/shared.setup.ts | 12 + .../jest/typescript-eslint-parser.setup.ts | 4 + ...ypescript-eslint-parser:traversal.setup.ts | 4 + packages/core/package.json | 24 +- packages/core/src/astUtils.ts | 108 +- packages/core/src/config.ts | 2 - packages/core/src/getFilesList.ts | 2 +- packages/core/src/index.ts | 3 +- packages/core/src/matchContext.ts | 103 ++ packages/core/src/parseQuery.ts | 6 +- .../parserSettings/_common/JSFamilyCommon.ts | 27 + .../afterWildcardsComparators.ts | 23 + .../beforeWildcardsComparators.ts | 8 + .../babelEslintParser/common.ts | 23 + .../matchDestructPropBeforeRename.ts | 6 + .../matchJsxElementRegardlessClosingTag.ts | 4 + .../matchJsxIdentifierUsingIdentifier.ts | 4 + .../matchObjectPropertiesOfDifferentTypes.ts | 6 + .../matchOptionalFlagInMemberExpression.ts | 4 + .../partialMatchTemplateLiteral.ts | 4 + .../nodeComparators/wildcardForAnyImport.ts | 6 + .../wildcardForAnyTypeAnnotation.ts | 7 + .../wildcardForAnyTypeParameter.ts | 25 + ...orAssignmentPatternOrDefaultParamValues.ts | 4 + .../wildcardForTypeKeywords.ts | 5 + .../babelEslintParser/settings.ts | 274 +++++ .../src/parserSettings/babelParser/common.ts | 9 + .../parserSettings/babelParser/settings.ts | 131 +- .../espreeParser/afterWildcardsComparators.ts | 19 + .../beforeWildcardsComparators.ts | 6 + .../src/parserSettings/espreeParser/common.ts | 17 + .../matchDestructPropBeforeRename.ts | 6 + .../matchJsxElementRegardlessClosingTag.ts | 4 + .../matchJsxIdentifierUsingIdentifier.ts | 4 + .../matchObjectPropertiesOfDifferentTypes.ts | 6 + .../matchOptionalFlagInMemberExpression.ts | 4 + .../partialMatchTemplateLiteral.ts | 4 + .../nodeComparators/wildcardForAnyImport.ts | 6 + ...orAssignmentPatternOrDefaultParamValues.ts | 4 + .../parserSettings/espreeParser/settings.ts | 246 ++++ .../afterWildcardsComparators.ts | 19 + .../beforeWildcardsComparators.ts | 6 + .../parserSettings/esprimaParser/common.ts | 17 + .../matchDestructPropBeforeRename.ts | 6 + .../matchJsxElementRegardlessClosingTag.ts | 4 + .../matchJsxIdentifierUsingIdentifier.ts | 4 + .../matchObjectPropertiesOfDifferentTypes.ts | 6 + .../matchOptionalFlagInMemberExpression.ts | 4 + .../partialMatchTemplateLiteral.ts | 4 + .../nodeComparators/wildcardForAnyImport.ts | 6 + ...orAssignmentPatternOrDefaultParamValues.ts | 4 + .../parserSettings/esprimaParser/settings.ts | 241 +++- packages/core/src/parserSettings/index.ts | 4 +- .../matchOptionalFlagInMemberExpression.ts | 4 +- ...orAssignmentPatternOrDefaultParamValues.ts | 3 +- .../matchJsxElementRegardlessClosingTag.ts | 2 + .../wildcardForAnyTypeAnnotation.ts | 2 +- .../typescriptEslintParser/common.ts | 8 + .../wildcardForAnyTypeParameter.ts | 2 +- .../typescriptEslintParser/settings.ts | 83 +- packages/core/src/searchInFs.ts | 14 +- packages/core/src/searchInStrings.ts | 8 +- packages/core/src/searchMultiThread.ts | 4 +- .../core/src/searchStages/compareNodes.ts | 279 ++++- .../getLocationOfMultilineMatch.ts | 8 +- packages/core/src/searchStages/searchAst.ts | 47 +- .../src/searchStages/searchFileContent.ts | 6 +- .../core/src/searchStages/traverseAndMatch.ts | 151 ++- .../core/src/searchStages/validateMatch.ts | 30 +- packages/core/src/testOnlyConfig.ts | 13 + packages/core/src/textSearch.ts | 6 + packages/core/src/types.ts | 62 +- packages/core/src/utils.ts | 26 +- packages/core/src/wildcardUtilsFactory.ts | 162 ++- packages/core/tools/babel.plugins.js | 1 - packages/core/tsconfig.build.json | 6 +- packages/core/tsconfig.json | 10 +- .../JavaScript/javaScriptParsers.test.ts | 436 +++++++ .../TypeScript/typeScriptParsers.test.ts | 156 +++ .../eslint/__tests__/common/options.test.ts | 332 ++++++ .../__tests__/{ => common}/utils.test.ts | 2 +- packages/eslint/declarations.d.ts | 5 + packages/eslint/jest.config.js | 81 +- packages/eslint/jest.setup.js | 1 - .../jest/jest.babel-eslint-parser.setup.ts | 17 + packages/eslint/jest/jest.common.setup.ts | 10 + packages/eslint/jest/jest.espree.setup.ts | 14 + packages/eslint/jest/jest.esprima.setup.ts | 9 + packages/eslint/jest/jest.shared.setup.ts | 16 + .../jest.typescript-eslint-parser.setup.ts | 14 + packages/eslint/package.json | 4 + packages/eslint/src/index.ts | 2 +- packages/eslint/src/lintCode.ts | 32 +- packages/eslint/src/types.ts | 11 + packages/eslint/src/utils.ts | 35 +- packages/eslint/tsconfig.json | 16 +- packages/vscode/declarations.d.ts | 2 + packages/vscode/package.json | 3 +- packages/vscode/tsconfig.json | 10 +- packages/vscode/webpack.extension.config.js | 3 + packages/vscode/webpack.webviews.config.js | 2 + tsconfig.json | 5 +- yarn.lock | 239 +++- 159 files changed, 8241 insertions(+), 1398 deletions(-) rename packages/core/__tests__/{search => JavaScript/matchCodePatterns}/assignmentPattern.test.ts (64%) rename packages/core/__tests__/{search => JavaScript/matchCodePatterns}/basic.test.ts (81%) rename packages/core/__tests__/{search => JavaScript/matchCodePatterns}/blocks.test.ts (55%) create mode 100644 packages/core/__tests__/JavaScript/matchCodePatterns/functions.test.ts create mode 100644 packages/core/__tests__/JavaScript/matchCodePatterns/import.test.ts rename packages/core/__tests__/{search => JavaScript/matchCodePatterns}/literals.test.ts (83%) rename packages/core/__tests__/{search => JavaScript/matchCodePatterns}/multiStatement.test.ts (69%) rename packages/core/__tests__/{search => JavaScript/matchCodePatterns}/objects.test.ts (52%) create mode 100644 packages/core/__tests__/JavaScript/matchCodePatterns/other.test.ts create mode 100644 packages/core/__tests__/JavaScript/other/astUtils.test.ts create mode 100644 packages/core/__tests__/JavaScript/other/parseQuery.test.ts rename packages/core/__tests__/{ => JavaScript/other}/searchInStrings.test.ts (92%) create mode 100644 packages/core/__tests__/JavaScript/other/searchWithContext.test.ts create mode 100644 packages/core/__tests__/JavaScript/other/wildcardUtils.test.ts create mode 100644 packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX.test.ts create mode 100644 packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX2.test.ts create mode 100644 packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/other.test.ts create mode 100644 packages/core/__tests__/JavaScriptWithJSX/other/astUtils.test.ts create mode 100644 packages/core/__tests__/JavaScriptWithJSX/other/parseQuery.test.ts rename packages/core/__tests__/{search => TextSearch}/textSearch.test.ts (95%) create mode 100644 packages/core/__tests__/TypeScript/matchCodePatterns/assignmentPattern.test.ts create mode 100644 packages/core/__tests__/TypeScript/matchCodePatterns/functionsAndTypes.test.ts create mode 100644 packages/core/__tests__/TypeScript/matchCodePatterns/other.test.ts rename packages/core/__tests__/{search => TypeScript/matchCodePatterns}/types.test.ts (91%) rename packages/core/__tests__/{ => TypeScript/other}/astUtils.test.ts (74%) rename packages/core/__tests__/{ => TypeScript/other}/parseQuery.test.ts (65%) rename packages/core/__tests__/{ => TypeScript/other}/searchMultiThread.test.ts (88%) rename packages/core/__tests__/{search => TypeScript/searchSmoke}/JSX.test.ts (51%) create mode 100644 packages/core/__tests__/TypeScript/searchSmoke/blocks.test.ts rename packages/core/__tests__/{search => TypeScript/searchSmoke}/codePatterns.test.ts (89%) rename packages/core/__tests__/{search => TypeScript/searchSmoke}/functions.test.ts (74%) rename packages/core/__tests__/{search => TypeScript/searchSmoke}/import.test.ts (88%) create mode 100644 packages/core/__tests__/TypeScript/searchSmoke/multiStatement.test.ts create mode 100644 packages/core/__tests__/TypeScript/searchSmoke/objects.test.ts create mode 100644 packages/core/__tests__/TypeScript/searchSmoke/other.test.ts rename packages/core/__tests__/{search => }/__fixturesOther__/textSearch.ts (100%) rename packages/core/__tests__/{ => common}/getFilesList.test.ts (99%) rename packages/core/__tests__/{ => common}/utils.test.ts (95%) delete mode 100644 packages/core/__tests__/search/other.test.ts create mode 100644 packages/core/declarations.d.ts delete mode 100644 packages/core/jest.setup.js create mode 100644 packages/core/jest/babel-eslint-parser.setup.ts create mode 100644 packages/core/jest/babel-eslint-parser:traversal.setup.ts create mode 100644 packages/core/jest/babel.setup.ts create mode 100644 packages/core/jest/babel:traversal.setup.ts create mode 100644 packages/core/jest/espree.setup.ts create mode 100644 packages/core/jest/espree:traversal.setup.ts create mode 100644 packages/core/jest/esprima.setup.ts create mode 100644 packages/core/jest/esprima:traversal.setup.ts create mode 100644 packages/core/jest/shared.setup.ts create mode 100644 packages/core/jest/typescript-eslint-parser.setup.ts create mode 100644 packages/core/jest/typescript-eslint-parser:traversal.setup.ts delete mode 100644 packages/core/src/config.ts create mode 100644 packages/core/src/matchContext.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/afterWildcardsComparators.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/common.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchDestructPropBeforeRename.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchOptionalFlagInMemberExpression.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/partialMatchTemplateLiteral.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyImport.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyTypeAnnotation.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyTypeParameter.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForTypeKeywords.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/settings.ts create mode 100644 packages/core/src/parserSettings/espreeParser/afterWildcardsComparators.ts create mode 100644 packages/core/src/parserSettings/espreeParser/beforeWildcardsComparators.ts create mode 100644 packages/core/src/parserSettings/espreeParser/common.ts create mode 100644 packages/core/src/parserSettings/espreeParser/nodeComparators/matchDestructPropBeforeRename.ts create mode 100644 packages/core/src/parserSettings/espreeParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts create mode 100644 packages/core/src/parserSettings/espreeParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts create mode 100644 packages/core/src/parserSettings/espreeParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts create mode 100644 packages/core/src/parserSettings/espreeParser/nodeComparators/matchOptionalFlagInMemberExpression.ts create mode 100644 packages/core/src/parserSettings/espreeParser/nodeComparators/partialMatchTemplateLiteral.ts create mode 100644 packages/core/src/parserSettings/espreeParser/nodeComparators/wildcardForAnyImport.ts create mode 100644 packages/core/src/parserSettings/espreeParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts create mode 100644 packages/core/src/parserSettings/espreeParser/settings.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/afterWildcardsComparators.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/beforeWildcardsComparators.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/common.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/nodeComparators/matchDestructPropBeforeRename.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/nodeComparators/matchOptionalFlagInMemberExpression.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/nodeComparators/partialMatchTemplateLiteral.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/nodeComparators/wildcardForAnyImport.ts create mode 100644 packages/core/src/parserSettings/esprimaParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts create mode 100644 packages/core/src/testOnlyConfig.ts create mode 100644 packages/eslint/__tests__/JavaScript/javaScriptParsers.test.ts create mode 100644 packages/eslint/__tests__/TypeScript/typeScriptParsers.test.ts create mode 100644 packages/eslint/__tests__/common/options.test.ts rename packages/eslint/__tests__/{ => common}/utils.test.ts (88%) create mode 100644 packages/eslint/declarations.d.ts delete mode 100644 packages/eslint/jest.setup.js create mode 100644 packages/eslint/jest/jest.babel-eslint-parser.setup.ts create mode 100644 packages/eslint/jest/jest.common.setup.ts create mode 100644 packages/eslint/jest/jest.espree.setup.ts create mode 100644 packages/eslint/jest/jest.esprima.setup.ts create mode 100644 packages/eslint/jest/jest.shared.setup.ts create mode 100644 packages/eslint/jest/jest.typescript-eslint-parser.setup.ts create mode 100644 packages/vscode/declarations.d.ts diff --git a/.gitignore b/.gitignore index 4c66499..34c941c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,6 @@ editor-log.txt cliQuery devQuery devFile - +*.snapshot.json dist *.temp \ No newline at end of file diff --git a/fix-framer-motion.js b/fix-framer-motion.js index 89d4b68..49afffa 100644 --- a/fix-framer-motion.js +++ b/fix-framer-motion.js @@ -5,7 +5,7 @@ const pkgPath = path.join( __dirname, 'node_modules', 'framer-motion', - 'package.json' + 'package.json', ) const framerMotionPkg = JSON.parse(fs.readFileSync(pkgPath).toString()) diff --git a/package.json b/package.json index 568da87..542ad5c 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "scripts": { "lint": "yarn workspaces run lint", "typecheck": "yarn workspaces run typecheck", + "test": "yarn workspaces run test", + "checks": "yarn typecheck && yarn lint && yarn test", "postinstall": "node fix-framer-motion.js" } -} \ No newline at end of file +} diff --git a/packages/cli/package.json b/packages/cli/package.json index 19cf52f..1a23427 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -45,6 +45,7 @@ "build:code": "tsc --project tsconfig.json", "docs-gen": "node tools/addDocsToReadme.js", "typecheck": "tsc --noEmit --project tsconfig.json", + "test": "echo 0", "test:circular": "dpdm --exit-code circular:1 --tree=false --warning=false './src/**'", "lint": "eslint --ext .js,.ts src", "lint:fix": "yarn lint --fix", diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index d9f52d7..94f01be 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -1,14 +1,16 @@ { "extends": "../../tsconfig.json", - "include": ["src"], + "include": [ + "src" + ], "compilerOptions": { - "baseUrl": "./src", - "paths": {}, - "outDir": "./dist", + "baseUrl": "./src", + "paths": {}, + "outDir": "./dist" }, "exclude": [ "dist", "node_modules", "tools/*.js" ] -} +} \ No newline at end of file diff --git a/packages/core/__tests__/search/assignmentPattern.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/assignmentPattern.test.ts similarity index 64% rename from packages/core/__tests__/search/assignmentPattern.test.ts rename to packages/core/__tests__/JavaScript/matchCodePatterns/assignmentPattern.test.ts index 058eba5..f1bc72a 100644 --- a/packages/core/__tests__/search/assignmentPattern.test.ts +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/assignmentPattern.test.ts @@ -1,17 +1,6 @@ -import path from 'path' -import { getFilesList } from '/getFilesList' -import { searchInStrings } from '../../src/searchInStrings' +import { searchInStrings } from '../../../src/searchInStrings' describe('AssignmentPattern improvements in include mode', () => { - let filesList = [] as string[] - - beforeAll(async () => { - filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), - omitGitIgnore: true, - }) - }) - it('should match assignment pattern in function arguments', () => { const fileContent = ` function some(param = null) { @@ -39,7 +28,7 @@ describe('AssignmentPattern improvements in include mode', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -70,72 +59,10 @@ describe('AssignmentPattern improvements in include mode', () => { ], }) - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - }) - - it('should match assignment pattern in function arguments type annotation', () => { - const fileContent = ` - function some(param: [] | null = null) { - - } - ` - - const queries = [ - ` - function some(param: [] | null) { - - } - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) - it('should not match assignment pattern in function arguments with wildcard but without types', () => { - const fileContent = ` - function some(param = null) { - - } - ` - - const queries = [ - ` - function some($$: [] | null = null) { - - } - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(0) - }) - it('should match assignment pattern in array destructuring', () => { const fileContent = ` const [data = []] = query @@ -160,7 +87,7 @@ describe('AssignmentPattern improvements in include mode', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -187,7 +114,7 @@ describe('AssignmentPattern improvements in include mode', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -214,7 +141,7 @@ describe('AssignmentPattern improvements in include mode', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -241,7 +168,7 @@ describe('AssignmentPattern improvements in include mode', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) }) diff --git a/packages/core/__tests__/search/basic.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/basic.test.ts similarity index 81% rename from packages/core/__tests__/search/basic.test.ts rename to packages/core/__tests__/JavaScript/matchCodePatterns/basic.test.ts index bcadf0d..f64e173 100644 --- a/packages/core/__tests__/search/basic.test.ts +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/basic.test.ts @@ -1,4 +1,4 @@ -import { searchInStrings } from '../../src/searchInStrings' +import { searchInStrings } from '../../../src/searchInStrings' describe('Basic queries', () => { it('Should match identifier in file', () => { @@ -18,7 +18,7 @@ describe('Basic queries', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) }) diff --git a/packages/core/__tests__/search/blocks.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/blocks.test.ts similarity index 55% rename from packages/core/__tests__/search/blocks.test.ts rename to packages/core/__tests__/JavaScript/matchCodePatterns/blocks.test.ts index 778e27b..9956a56 100644 --- a/packages/core/__tests__/search/blocks.test.ts +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/blocks.test.ts @@ -1,21 +1,17 @@ -import { searchInFileSystem } from '/searchInFs' -import { compareCode } from '../utils' +import { compareCode } from '../../utils' -import path from 'path' -import { getFilesList } from '/getFilesList' -import { searchInStrings } from '../../src/searchInStrings' +import { searchInStrings } from '../../../src/searchInStrings' describe('blocks', () => { - let filesList = [] as string[] - - beforeAll(async () => { - filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), - omitGitIgnore: true, - }) - }) - it('should match exact whole block', () => { + const fileContent = ` + const fn = () => { + toggleRTL(); + I18nManager.forceRTL(!isRTL); + Updates.reloadAsync(); + } + ` + const queries = [ ` () => { @@ -26,19 +22,32 @@ describe('blocks', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'exact', - filePaths: filesList, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) expect(compareCode(matches[0].code, queries[0])).toBeTruthy() }) it('should match block using query without all statements and different order', () => { + const fileContent = ` + const fn = () => { + toggleRTL(); + I18nManager.forceRTL(!isRTL); + Updates.reloadAsync(); + } + ` + const queries = [ ` () => { @@ -48,17 +57,30 @@ describe('blocks', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'include', - filePaths: filesList, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) it('should match block using query without all statements, but with order', () => { + const fileContent = ` + const fn = () => { + toggleRTL(); + I18nManager.forceRTL(!isRTL); + Updates.reloadAsync(); + } + ` + const queries = [ ` () => { @@ -68,13 +90,18 @@ describe('blocks', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'include-with-order', - filePaths: filesList, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -117,7 +144,7 @@ describe('blocks', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -146,7 +173,40 @@ describe('blocks', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match whole program using block wildcard', () => { + const fileContent = ` + import a from 'b' + import c from 'd' + + module.exports = { + fn: () => a + b + } + ` + + const queries = [ + ` + {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) + expect(compareCode(matches[0].code, fileContent)).toBe(true) }) }) diff --git a/packages/core/__tests__/JavaScript/matchCodePatterns/functions.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/functions.test.ts new file mode 100644 index 0000000..58c78d6 --- /dev/null +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/functions.test.ts @@ -0,0 +1,141 @@ +import { parserType } from '../../utils' +import { searchInStrings } from '../../../src/searchInStrings' + +describe('functions', () => { + it('should match function with 2 arguments', () => { + const testFileContent = ` + (a,b,c) => {}; + (a,d) => {}; + (a, { b}) => {}; + ` + + const mockedFilesList = [ + { + path: 'mock', + content: testFileContent, + }, + ] + const queries = [ + ` + ($$_ref1, $$_ref2) => {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: mockedFilesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('should match function with 2 arguments using double wildcard', () => { + const testFileContent = ` + (a,b,c) => {}; + (a,d) => {}; + (a, { b}) => {}; + ` + + const mockedFilesList = [ + { + path: 'mock', + content: testFileContent, + }, + ] + const queries = [ + ` + ($$_ref1, $$$_ref2) => {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: mockedFilesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(3) + }) + + it('should match function with 3 arguments', () => { + const testFileContent = ` + (a,b,c) => {}; + (a,d) => {}; + (a, { b}) => {}; + ` + + const mockedFilesList = [ + { + path: 'mock', + content: testFileContent, + }, + ] + const queries = [ + ` + ($$_ref1, $$_ref2, $$_ref3) => {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: mockedFilesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + // TODO add support for matching this in babel (works out-of-the-box in EStree parsers) + if (parserType !== 'babel') { + it('should match function expression inside object', () => { + const fileContent = ` + const obj = { + someFn() {} + } + ` + const queries = [ + ` + function() {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: 'mockPath' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match function expression inside class', () => { + const fileContent = ` + class Cl { + someFn() {} + } + ` + const queries = [ + ` + function() {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: 'mockPath' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + } else { + it.todo('should match function expression inside object') + it.todo('should match function expression inside class') + } +}) diff --git a/packages/core/__tests__/JavaScript/matchCodePatterns/import.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/import.test.ts new file mode 100644 index 0000000..290a265 --- /dev/null +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/import.test.ts @@ -0,0 +1,172 @@ +import { searchInStrings } from '../../../src/searchInStrings' + +describe('Import', () => { + it('Should find imports including some keys with persisted order', () => { + const fileContent = ` + import { + Button, + Wrapper, + IconButton + } from 'react-native-paper' + ` + const query = ` + import { + Button, + IconButton + } from 'react-native-paper' + ` + const { matches, errors } = searchInStrings({ + mode: 'include-with-order', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should not find any imports including some keys when order changed', () => { + const fileContent = ` + import { + Button, + Wrapper, + IconButton + } from 'react-native-paper' + ` + + const query = ` + import { + IconButton, + Button, + } from 'react-native-paper' + ` + const { matches, errors } = searchInStrings({ + mode: 'include-with-order', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Should find different imports of library', () => { + const fileContent = ` + import rn from 'react-native' + import * as rn2 from 'react-native' + import { View } from 'react-native' + import { View as RNView } from 'react-native' + ` + + const query = ` + import $$$ from 'react-native'; + ` + const { matches, errors } = searchInStrings({ + mode: 'exact', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(4) + }) + + it('Should find default imports of a dependency', () => { + const fileContent = ` + import ScreenWrapper from '../ScreenWrapper'; + import { ScreenWrapper2 }from '../ScreenWrapper'; + ` + + const query = ` + import $$ from '../ScreenWrapper'; + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find default imports with case insensitive query', () => { + const fileContent = ` + import ScreenWrapper from '../ScreenWrapper'; + ` + const query = ` + import $$screenwrapper from '../screenwrapper'; + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + caseInsensitive: true, + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + // TODO fix it, it should not match the second import + it('Should find aliased imports of a dependency', () => { + const fileContent = ` + import { Provider as PaperProvider } from 'react-native-paper'; + import { Provider } from 'react-native-paper'; + + ` + + const query = ` + import { Provider as $$ } from 'react-native-paper'; + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should find imports with both default and named', () => { + const fileContent = ` + import Default, { Provider as PaperProvider } from 'react-native-paper'; + import { Provider as PaperProvider2 } from 'react-native-paper'; + import Default2 from 'react-native-paper'; + + ` + const query = ` + import $$, { $$$ } from '$$'; + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find aliased reexports ', () => { + // TODO: fix - it matches "export {default} from " but it shouldn't + const fileContent = ` + export { default } from 'lib' + export { one as another } from 'lib' + + ` + + const query = ` + export { $$ as $$$ } from '$$'; + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) +}) diff --git a/packages/core/__tests__/search/literals.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/literals.test.ts similarity index 83% rename from packages/core/__tests__/search/literals.test.ts rename to packages/core/__tests__/JavaScript/matchCodePatterns/literals.test.ts index 7ad2543..e955d41 100644 --- a/packages/core/__tests__/search/literals.test.ts +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/literals.test.ts @@ -1,4 +1,4 @@ -import { searchInStrings } from '/searchInStrings' +import { searchInStrings } from '../../../src/searchInStrings' describe('Literals', () => { const testFileContent = ` @@ -40,7 +40,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -57,7 +57,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -75,7 +75,7 @@ describe('Literals', () => { caseInsensitive: true, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -112,7 +112,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -125,7 +125,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(5) }) @@ -138,7 +138,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -151,7 +151,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(3) }) @@ -164,7 +164,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -177,7 +177,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -190,7 +190,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(0) }) @@ -203,7 +203,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -216,7 +216,7 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -229,12 +229,12 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) it('should match multiple template literals with include mode', () => { - const queries = ['`{$$}`'] + const queries = ['`${$$}`'] const { matches, errors } = searchInStrings({ mode: 'include', @@ -242,8 +242,34 @@ describe('Literals', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) - expect(matches.length).toBe(0) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(3) + }) + + it('should match template literal using partial query with include mode 1', () => { + const queries = ['`val ${$$}`'] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match template literal using partial query with include mode 2', () => { + const queries = ['`text`'] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) }) it('should match different parts of template literals with include mode', () => { @@ -321,7 +347,7 @@ describe('Literals', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) }) diff --git a/packages/core/__tests__/search/multiStatement.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/multiStatement.test.ts similarity index 69% rename from packages/core/__tests__/search/multiStatement.test.ts rename to packages/core/__tests__/JavaScript/matchCodePatterns/multiStatement.test.ts index d3d8989..c9177fb 100644 --- a/packages/core/__tests__/search/multiStatement.test.ts +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/multiStatement.test.ts @@ -1,19 +1,106 @@ -import { searchInFileSystem } from '/searchInFs' -import { compareCode } from '../utils' +import { compareCode } from '../../utils' -import path from 'path' -import { getFilesList } from '/getFilesList' -import searchInStrings from '/searchInStrings' +import searchInStrings from '../../../src/searchInStrings' describe('multi statements', () => { - let filesList = [] as string[] + it('should find proper position in file if one of the multiline query statements is matched more than once in file node', () => { + const fileContent = ` + const result = db.model.findUnique(); + + if (!result) { + throw new Error(); + } + + const results = db.model2.find(); + ` + + const queries = [ + ` + const $$ = db.$$.$$(); + + if (!$$) { + throw new Error(); + } + `, + ] + + const files = [ + { + content: fileContent, + path: 'test-path', + }, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include-with-order', + files, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + const expectedMatch = ` + const result = db.model.findUnique(); + + if (!result) { + throw new Error(); + } + ` + expect(compareCode(matches[0].code, expectedMatch)).toBe(true) + }) + + it('should find proper position in file for several exact same statements in query and file', () => { + const fileContent = ` + export * from 'fileA' + export * from 'fileB' + export * from 'fileC' + export * from 'fileD' + + ` + + const queries = [ + ` + export * from '$$' + export * from '$$' + export * from '$$' + `, + ] - beforeAll(async () => { - filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), - omitGitIgnore: true, + const files = [ + { + content: fileContent, + path: 'test-path', + }, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files, + queryCodes: queries, }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + const expectedMatch1 = ` + export * from 'fileA' + export * from 'fileB' + export * from 'fileC' + ` + + expect(compareCode(matches[0].code, expectedMatch1)).toBe(true) }) +}) + +describe('multi statements 2', () => { + const fileContent = ` + () => { + toggleRTL(); + I18nManager.forceRTL(!isRTL); + Updates.reloadAsync(); + } + ` it('should match three expressions without block wrapper in function body', () => { const queries = [ @@ -24,13 +111,13 @@ describe('multi statements', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'include', - filePaths: filesList, + files: [{ content: fileContent, path: '' }], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -43,13 +130,13 @@ describe('multi statements', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'exact', - filePaths: filesList, + files: [{ content: fileContent, path: '' }], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -62,13 +149,13 @@ describe('multi statements', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'include', - filePaths: filesList, + files: [{ content: fileContent, path: '' }], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -83,16 +170,30 @@ describe('multi statements', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'include', - filePaths: filesList, + files: [{ content: fileContent, path: '' }], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) + const fileContent2 = ` + import * as React from 'react' + import { Appbar } from 'react-native-paper' + import { createStackNavigator } from '@react-navigation/stack' + import ExampleList, { examples } from './ExampleList' + const Stack = createStackNavigator() + + export default function Root() { + return ( + + ) + } + ` + it('should match two expressions in program body and include middle line in result', () => { const queries = [ ` @@ -101,13 +202,13 @@ describe('multi statements', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'include', - filePaths: filesList, + files: [{ content: fileContent2, path: '' }], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) expect(matches[0].code.split('\n').filter(Boolean)).toHaveLength(3) @@ -122,13 +223,13 @@ describe('multi statements', () => { `, ] - const { matches, errors } = searchInFileSystem({ + const { matches, errors } = searchInStrings({ mode: 'include', - filePaths: filesList, + files: [{ content: fileContent2, path: '' }], queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) expect(compareCode(matches[0].code, queries[0])).toBeTruthy() @@ -142,102 +243,13 @@ describe('multi statements', () => { `, ] - const { matches, errors } = searchInFileSystem({ - mode: 'include-with-order', - filePaths: filesList, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(0) - }) - - it('should find proper position in file if one of the multiline query statements is matched more than once in file node', () => { - const fileContent = ` - const result = await db.model.findUnique(); - - if (!result) { - throw new Error(); - } - - const results = await db.model2.find(); - ` - - const queries = [ - ` - const $$ = await db.$$.$$(); - - if (!$$) { - throw new Error(); - } - `, - ] - - const files = [ - { - content: fileContent, - path: 'test-path', - }, - ] - const { matches, errors } = searchInStrings({ mode: 'include-with-order', - files, + files: [{ content: fileContent2, path: '' }], queryCodes: queries, }) - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - - const expectedMatch = ` - const result = await db.model.findUnique(); - - if (!result) { - throw new Error(); - } - ` - expect(compareCode(matches[0].code, expectedMatch)).toBe(true) - }) - - it('should find proper position in file for several exact same statements in query and file', () => { - const fileContent = ` - export * from 'fileA' - export * from 'fileB' - export * from 'fileC' - export * from 'fileD' - - ` - - const queries = [ - ` - export * from '$$' - export * from '$$' - export * from '$$' - `, - ] - - const files = [ - { - content: fileContent, - path: 'test-path', - }, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - files, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - - const expectedMatch1 = ` - export * from 'fileA' - export * from 'fileB' - export * from 'fileC' - ` - - expect(compareCode(matches[0].code, expectedMatch1)).toBe(true) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) }) }) diff --git a/packages/core/__tests__/search/objects.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/objects.test.ts similarity index 52% rename from packages/core/__tests__/search/objects.test.ts rename to packages/core/__tests__/JavaScript/matchCodePatterns/objects.test.ts index 708304e..48ebc24 100644 --- a/packages/core/__tests__/search/objects.test.ts +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/objects.test.ts @@ -1,8 +1,16 @@ -import { searchInFileSystem } from '/searchInFs' -import { compareCode } from '../utils' -import path from 'path' -import { getFilesList } from '/getFilesList' -import { searchInStrings } from '../../src/searchInStrings' +import { createLogger } from '../../../src/logger' +import { parseQueries } from '../../../src/parseQuery' +import { searchInStrings } from '../../../src/searchInStrings' +import { searchAst } from '../../../src/searchStages/searchAst' +import { NotNullParsedQuery } from '../../../src/types' +import { + compareCode, + getParserSettings, + parserType, + fixturesPath, +} from '../../utils' +import { getFilesList } from '../../../src/getFilesList' +import { searchInFileSystem } from '../../../src/searchInFs' describe('Objects', () => { const testFile = ` @@ -80,7 +88,7 @@ describe('Objects', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -109,7 +117,7 @@ describe('Objects', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -135,7 +143,7 @@ describe('Objects', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -159,7 +167,7 @@ describe('Objects', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -201,7 +209,7 @@ describe('Objects', () => { }); ` - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(4) expect(compareCode(`(${matches[0].code})`, firstMatch)).toBeTruthy() @@ -225,7 +233,7 @@ describe('Objects', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) // It used to be 0, but now `{}` matches program as a block matches program }) @@ -250,38 +258,10 @@ describe('Objects', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) - it('should match possibly repeated object properties', async () => { - const filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), - omitGitIgnore: true, - }) - - const queries = [ - ` - StyleSheet.create({ - $$: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - }, - }); - `, - ] - - const { matches, errors } = searchInFileSystem({ - mode: 'include', - filePaths: filesList, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(2) - }) - it('should match equivalent object keys', () => { const queries = [ ` @@ -307,7 +287,7 @@ describe('Objects', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(5) }) @@ -332,26 +312,113 @@ describe('Objects', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) - it('should match OptionalMemberExpression and non-optional MemberExpression interchangeably in include mode object property before rename', () => { - const testFile = ` + /** + * Esprima does not support optional chaining + */ + if (parserType !== 'esprima') { + it('should match OptionalMemberExpression and non-optional MemberExpression interchangeably in include mode', () => { + const testFile = ` obj?.field?.field obj.field.field obj?.field.field obj.field?.field ` - const query1 = ` + const query1 = ` obj.field.field ` - const query2 = ` + const query2 = ` obj?.field?.field ` - const { matches: matches1, errors: errors1 } = searchInStrings({ + const { matches: matches1, errors: errors1 } = searchInStrings({ + mode: 'include', + files: [ + { + path: 'mock', + content: testFile, + }, + ], + queryCodes: [query1], + }) + + const { matches: matches2, errors: errors2 } = searchInStrings({ + mode: 'include', + files: [ + { + path: 'mock', + content: testFile, + }, + ], + queryCodes: [query2], + }) + + expect(errors1.length).toBe(0) + expect(matches1.length).toBe(4) + + expect(errors2.length).toBe(0) + expect(matches2.length).toBe(4) + }) + + it('should match OptionalMemberExpression and non-optional MemberExpression interchangeably in include mode when assigned to variables', () => { + const testFile = ` + const a = obj?.field?.field + const b = obj.field.field + const c = obj?.field.field + const d = obj.field?.field + ` + + const query1 = ` + obj.field.field + ` + const query2 = ` + obj?.field?.field + ` + + const { matches: matches1, errors: errors1 } = searchInStrings({ + mode: 'include', + files: [ + { + path: 'mock', + content: testFile, + }, + ], + queryCodes: [query1], + }) + + const { matches: matches2, errors: errors2 } = searchInStrings({ + mode: 'include', + files: [ + { + path: 'mock', + content: testFile, + }, + ], + queryCodes: [query2], + }) + + expect(errors1.length).toBe(0) + expect(matches1.length).toBe(4) + + expect(errors2.length).toBe(0) + expect(matches2.length).toBe(4) + }) + } + + it('should match chain expression start with nodes tree wildcard', () => { + const testFile = ` + z.string().optional().nullable() + ` + + const query = ` + $$$.optional().nullable() + ` + + const { matches, errors } = searchInStrings({ mode: 'include', files: [ { @@ -359,10 +426,24 @@ describe('Objects', () => { content: testFile, }, ], - queryCodes: [query1], + queryCodes: [query], }) - const { matches: matches2, errors: errors2 } = searchInStrings({ + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + // TODO support this + it.skip('should match chain expression using optional chain query with call expression at the end', () => { + const testFile = ` + z.string.nullable() + ` + + const query = ` + z?.sting?.nullable() + ` + + const { matches, errors } = searchInStrings({ mode: 'include', files: [ { @@ -370,13 +451,89 @@ describe('Objects', () => { content: testFile, }, ], - queryCodes: [query2], + queryCodes: [query], }) - expect(errors1.length).toBe(0) - expect(matches1.length).toBe(4) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match chain expression start with nodes tree wildcard in AST search inside raw AST node', () => { + const parserSettings = getParserSettings() + const searchSettings = { + mode: 'include' as const, + caseInsensitive: true, + parserSettings, + logger: createLogger(), + } + const testFile = ` + z.string().optional().nullable() + ` + + const query = ` + $$$.optional().nullable() + ` + + const fileNode = parserSettings.parseCode(testFile, '') + + // 👈 unwrap program node to mimic behavior of query builder search + const extractedFileNode = parserSettings.unwrapExpressionStatement( + parserSettings.getProgramBodyFromRootNode(fileNode)[0], + ) + + const [queries, parseOk] = parseQueries( + [query], + searchSettings.caseInsensitive, + searchSettings.parserSettings, + ) + + const { matches } = searchAst( + extractedFileNode, + { + queries: queries as NotNullParsedQuery[], + ...searchSettings, + getCodeForFileNode: () => '', + }, + false, // 👈 not unwrap program node inside searchAst + )[0] + + expect(extractedFileNode.type).toBe('CallExpression') + expect(queries?.[0]?.queryNode?.type).toBe('CallExpression') + expect(matches.length).toBe(1) + }) + + it('should match possibly repeated object properties', async () => { + const fileContent = ` + StyleSheet.create({ + a: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + b: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + }); + ` + + const queries = [ + ` + StyleSheet.create({ + $$: $$$_one, + $$: $$$_one, + }); + `, + ] - expect(errors2.length).toBe(0) - expect(matches2.length).toBe(4) + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) }) }) diff --git a/packages/core/__tests__/JavaScript/matchCodePatterns/other.test.ts b/packages/core/__tests__/JavaScript/matchCodePatterns/other.test.ts new file mode 100644 index 0000000..f13619c --- /dev/null +++ b/packages/core/__tests__/JavaScript/matchCodePatterns/other.test.ts @@ -0,0 +1,308 @@ +import { searchInStrings } from '../../../src/searchInStrings' +import { compareCode } from '../../utils' +import { searchInFileSystem } from '../../../src/searchInFs' + +describe('Other', () => { + it('Should properly match identifiers with multiple wildcard sections', () => { + const fileContent = ` + varOne; + var_two; + ` + + const queries = [`$$_$$`] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + expect(Object.keys(matches[0].aliases.identifierAliasesMap)).toHaveLength(0) + }) + + it('Should properly match identifiers with content before and after wildcard', () => { + const fileContent = ` + preContentPost; + ` + + const queries = [`pre$$Post`] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match identifier with aliased wildcard', () => { + const fileContent = ` + const preContent = 5 + ` + + const queries = [`pre$$_ref1`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match identifier with wildcard with ref and content before and after it', () => { + const fileContent = ` + const preContentPost = 5 + ` + + const queries = [ + ` + pre$$_ref1_Post + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match try-catch block with statement and re-throw of error', () => { + const fileContent = ` + try { + bla.bla.bla + } catch (error) { + logger.error(error); + throw error; + } + ` + + const queries = [`try {} catch($$) { Logger.error($$); throw $$ }`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match class with static method', () => { + const fileContent = ` + class Test { + method() { return 0 } + static getInstance(){ + return new Test() + } + } + ` + + const queries = [`class $$ {static getInstance(){}}`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match function with redundant block statement', () => { + const fileContent = ` + const DrawerContent = () => { + return + {preferences => } + ; + }; + + const add5 = (val) => { + return val + 5 + } + ` + + const queries = [ + ` + const $$ = () => { + return $$$ + }; + `, + `const $$ = ($$$) => { + return $$$ + }; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + + expect( + compareCode(matches[1].code, `const add5 = (val) => { return val + 5 }`), + ).toBeTruthy() + }) + + it('should match nested ternary operator', () => { + const fileContent = ` + a ? b : a.b ? c.d : fn() + ` + + const queries = [ + ` + $$$ ? $$$ : $$$ ? $$$ : $$$ + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should find all console logs', () => { + const fileContent = ` + console.log('test') + console.log() + console.error() + ` + + const query = ` + console.log() + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should find all requires of jpg assets', () => { + const fileContent = ` + const asset = require('public/assets/image.jpg'); + const asset2 = require('image.jpg'); + + ` + + const queries = [ + ` + require("$$assets$$.jpg") + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find all string concatenations using + operator', () => { + const fileContent = ` + () => {return "asd" + "ASD"} + ` + + const queries = [ + ` + "$$" + "$$" + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should not include the same result twice 2', () => { + const fileContent = ` + fn(() => { + return 5 + }) + ` + + const queries = [ + ` + $$(() => {}) + `, + ` + $$(() => $$$) + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) +}) diff --git a/packages/core/__tests__/JavaScript/other/astUtils.test.ts b/packages/core/__tests__/JavaScript/other/astUtils.test.ts new file mode 100644 index 0000000..568f71f --- /dev/null +++ b/packages/core/__tests__/JavaScript/other/astUtils.test.ts @@ -0,0 +1,48 @@ +import { createWildcardUtils } from '../../../src/wildcardUtilsFactory' +import { PoorNodeType } from '../../../src/types' +import { sortByLeastIdentifierStrength } from '../../../src/astUtils' + +describe('AST utils', () => { + const getIdentifierNodeName = (node: PoorNodeType) => node.name as string + const identifierTypes: string[] = ['Identifier'] + const numericWildcard = '0x0' + const wildcardChar = '$' + const wildcardUtils = createWildcardUtils( + identifierTypes, + numericWildcard, + wildcardChar, + getIdentifierNodeName, + ) + + const idNode = (name: string) => ({ type: 'Identifier', name }) + + it('should sort identifiers by least strength', () => { + const identifiersList: PoorNodeType[] = [ + idNode('$$'), + idNode('oooo'), + idNode('foo'), + idNode('$$$'), + idNode('sdf$$_ref1_asd'), + { type: 'literal', value: 4 }, + idNode('$$_ref1'), + idNode('$$_ref1_asd'), + { type: 'literal', value: 'asd' }, + ] + + const sortedArr = [...identifiersList].sort((a, b) => + sortByLeastIdentifierStrength(a, b, wildcardUtils, getIdentifierNodeName), + ) + + expect(sortedArr.map(({ name, value }) => name || value)).toMatchObject([ + 'oooo', + 'foo', + 4, + 'asd', + 'sdf$$_ref1_asd', + '$$_ref1_asd', + '$$', + '$$_ref1', + '$$$', + ]) + }) +}) diff --git a/packages/core/__tests__/JavaScript/other/parseQuery.test.ts b/packages/core/__tests__/JavaScript/other/parseQuery.test.ts new file mode 100644 index 0000000..bff8303 --- /dev/null +++ b/packages/core/__tests__/JavaScript/other/parseQuery.test.ts @@ -0,0 +1,53 @@ +import { getUniqueTokens, extractQueryNode } from '../../../src/parseQuery' +import { getParserSettings } from '../../utils' + +describe('parse query', () => { + const parserSettings = getParserSettings() + + it('should get unique tokens', () => { + const queryCode = ` + require('some$$wildcard$$string') + const a = 'b' + const alpha = 'beta' + 123; + pre$$_ref1_post + $$_ref1_content$$_ref2 + asd$$_invalidRef_$$ + asd$$_invalidRef$$ + { + { + () => { + 0x0; + return 'test' + } + } + } + f('some$$_ref1_tttt$$_ref2') + ` + const { queryNode } = extractQueryNode( + parserSettings.parseCode(queryCode), + parserSettings, + ) + + const uniqueTokens = [...getUniqueTokens(queryNode, false, parserSettings)] + + expect(uniqueTokens).toMatchObject([ + 'require', + 'some', + 'wildcard', + 'string', + 'alpha', + 'beta', + '123', + 'pre', + 'post', + 'content', + 'asd', + '_invalidRef_', + '_invalidRef', + 'test', + // 'some', // only 'tttt' is new + 'tttt', + ]) + }) +}) diff --git a/packages/core/__tests__/searchInStrings.test.ts b/packages/core/__tests__/JavaScript/other/searchInStrings.test.ts similarity index 92% rename from packages/core/__tests__/searchInStrings.test.ts rename to packages/core/__tests__/JavaScript/other/searchInStrings.test.ts index 2ab6415..9ecd6a2 100644 --- a/packages/core/__tests__/searchInStrings.test.ts +++ b/packages/core/__tests__/JavaScript/other/searchInStrings.test.ts @@ -1,4 +1,4 @@ -import { searchInStrings } from '/searchInStrings' +import { searchInStrings } from '../../../src/searchInStrings' describe('Search in strings', () => { jest.mock('fs', () => { @@ -9,7 +9,7 @@ describe('Search in strings', () => { return { ...jest.requireActual('fs'), - readFileSync: throwOnUsage, + readFileSync: jest.fn(), } }) diff --git a/packages/core/__tests__/JavaScript/other/searchWithContext.test.ts b/packages/core/__tests__/JavaScript/other/searchWithContext.test.ts new file mode 100644 index 0000000..8f3d484 --- /dev/null +++ b/packages/core/__tests__/JavaScript/other/searchWithContext.test.ts @@ -0,0 +1,1051 @@ +import { searchInStrings } from '../../../src/searchInStrings' +import { compareAstToCode, compareCode, parserType } from '../../utils' +import { useTraverseApproachTestOnly } from '../../../src/testOnlyConfig' + +describe('Search with context', () => { + it('Should match code with wildcard alias in search query', () => { + const fileContent = ` + const someVar = 5 + + someFunction(someVar); + + ` + + const queries = [ + ` + const $$_ref1 = 5 + + someFunction($$_ref1); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'someVar', + ) + }) + + it('Should match code with wildcard alias in the middle of identifier', () => { + const fileContent = ` + const preMatchedPost = 5 + + someFunction(preMatchedPost); + + ` + + const queries = [ + ` + const pre$$_ref1_Post = 5 + + someFunction(pre$$_ref1_Post); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'Matched', + ) + }) + + it('Should match code with wildcard alias in the middle of identifier when only the wildcard is used in subsequent statement', () => { + const fileContent = ` + const preMatchedPost = 5 + + someFunction(Matched); + + ` + + const queries = [ + ` + const pre$$_ref1_Post = 5 + + someFunction($$_ref1); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'Matched', + ) + }) + + it('Should match code with 2 wildcard aliases in the middle of identifier when wildcard aliases and new chars creates an id in subsequent statement where wildcards are separated by other chars', () => { + const fileContent = ` + const preMatchedPostNext = 5 + + someFunction(NewMatchedValueNext); + + ` + + const queries = [ + ` + const pre$$_ref1_Post$$_ref2 = 5 + + someFunction(New$$_ref1_Value$$_ref2_); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'Matched', + ) + + expect(matches[0].aliases.identifierAliasesMap['ref2'].aliasValue).toBe( + 'Next', + ) + }) + + it('Should match code with 1 partial wildcard alias in identifier with subsequent statement that uses that alias in other variable name', () => { + const fileContent = ` + const preMatched = 5 + + someFunction(NewMatched); + + ` + + const queries = [ + ` + const pre$$_ref1 = 5 + + someFunction(New$$_ref1); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'Matched', + ) + }) + + it('Should match code with 1 partial wildcard alias in identifier with subsequent statement inside new block that uses that alias in other variable name', () => { + const fileContent = ` + const preMatched = 5; + + { + const a = b; + someFunction(NewMatched); + class A {} + } + + ` + + const queries = [ + ` + const pre$$_ref1 = 5 + + { + someFunction(New$$_ref1); + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'Matched', + ) + }) + + it('Should not match code with 2 wildcard aliases in the middle of identifier when wildcard aliases and new chars creates an id in subsequent statement where wildcards are next to each other', () => { + const fileContent = ` + const preMatchedPostNext = 5 + + someFunction(NewMatchedNextValue); + + ` + + const queries = [ + ` + const pre$$_ref1_Post$$_ref2 = 5 + + someFunction(New$$_ref1_$$_ref2_Value); // 👈 this is invalid wildcard + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Should match code with wildcard alias case insensitive', () => { + const fileContent = ` + const preMatchedPost = 5 + + someFunction(prematchedPost); + + ` + + const queries = [ + ` + const pre$$_ref1_Post = 5 + + someFunction(pre$$_ref1_Post); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'Matched', + ) + }) + + it('Should match code with wildcard alias case sensitive', () => { + const fileContent = ` + const preMatchedPost = 5 + + someFunction(preMatchedPost); + + ` + + const queries = [ + ` + const pre$$_ref1_Post = 5 + + someFunction(pre$$_ref1_Post); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: false, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'Matched', + ) + }) + + it('Should not match code with wildcard alias case sensitive', () => { + const fileContent = ` + const preMatchedPost = 5 + + someFunction(prematchedPost); + + ` + + const queries = [ + ` + const pre$$_ref1_Post = 5 + + someFunction(pre$$_ref1_Post); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: false, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Should alias nodes tree', () => { + const fileContent = ` + someFunction((param) => { + const a = 6 + return a + param + }); + ` + + const queries = [ + ` + someFunction($$$_ref1); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect( + compareAstToCode( + matches[0].aliases.nodesTreeAliasesMap['ref1'].aliasNode, + `(param) => { + const a = 6 + return a + param + }`, + ), + ).toBe(true) + + expect( + compareCode( + matches[0].aliases.nodesTreeAliasesMap['ref1'].aliasValue, + `(param) => { + const a = 6 + return a + param + }`, + ), + ).toBe(true) + }) + + it('Should alias nodes tree with camelCase alias name', () => { + const fileContent = ` + someFunction((param) => { + const a = 6 + return a + param + }); + ` + + const queries = [ + ` + someFunction($$$_someRef); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect( + compareAstToCode( + matches[0].aliases.nodesTreeAliasesMap['someRef'].aliasNode, + `(param) => { + const a = 6 + return a + param + }`, + ), + ).toBe(true) + + expect( + compareCode( + matches[0].aliases.nodesTreeAliasesMap['someRef'].aliasValue, + `(param) => { + const a = 6 + return a + param + }`, + ), + ).toBe(true) + }) + + it('Should match aliased nodes tree in subsequent statements', () => { + const fileContent = ` + someFunction(() => 5); + + someOtherFunction(() => 5); + ` + + const queries = [ + ` + someFunction($$$_ref1); + + someOtherFunction($$$_ref1); + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect( + compareAstToCode( + matches[0].aliases.nodesTreeAliasesMap['ref1'].aliasNode, + '() => 5', + ), + ).toBe(true) + + expect( + compareCode( + matches[0].aliases.nodesTreeAliasesMap['ref1'].aliasValue, + '() => 5', + ), + ).toBe(true) + }) + + it('Should not match aliased nodes tree in subsequent statements if they are different', () => { + const fileContent = ` + someFunction(() => 5); + + someOtherFunction(() => 555); + ` + + const queries = [ + ` + someFunction($$$_ref1); + + someOtherFunction($$$_ref1); + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Should not match code with wildcard alias in search query if wildcard alias does not match', () => { + const fileContent = ` + const someVar = 5 + + someFunction(someOtherVar); + + ` + + const queries = [ + ` + const $$_ref1 = 5 + + someFunction($$_ref1); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('aliased matches should not interferer in different code paths', () => { + const fileContent = ` + const someVar = 5 + + someFunction(someVar); + + function Sth() { + const someOtherVar = 5 + + someFunction(someOtherVar); + } + + ` + + const queries = [ + ` + const $$_ref1 = 5 + + someFunction($$_ref1); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'someVar', + ) + + expect(matches[1].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'someOtherVar', + ) + }) + + it('Should match aliased id wildcard in nested function calls when aliased id is the same', () => { + const fileContent = ` + someFn( + param, + someOtherFn(param), + ) + ` + + const queries = [ + ` + someFn( + $$_ref1, + someOtherFn($$_ref1), + ) + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'param', + ) + }) + + it('Should not match aliased id wildcard in nested function calls when aliased id is not the same', () => { + const fileContent = ` + someFn( + param, + someOtherFn(param2), + ) + ` + + const queries = [ + ` + someFn( + $$_ref1, + someOtherFn($$_ref1), + ) + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + // This is not always desired, but can be worked around with query builder + // Test to assert that behavior + it('Should match first alias of two possible identifiers for given level', () => { + const fileContent = ` + import { FlexProps, BoxProps} from '@ui/layout' + ` + + const queries = [ + ` + import { $$_prefix_Props } from '@ui/layout' + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['prefix'].aliasValue).toBe( + 'Flex', + ) + }) + + it('should get pre and post aliased wildcards while pre is empty', () => { + const fileContent = ` + ConsultantsSearchService + ` + + const queries = [`$$_pre_Consultant$$_post`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + expect(matches[0].aliases.identifierAliasesMap['pre'].aliasValue).toBe('') + + expect(matches[0].aliases.identifierAliasesMap['post'].aliasValue).toBe( + 'sSearchService', + ) + }) + + it('should get pre and post aliased wildcards with case insensitive mode', () => { + const fileContent = ` + CustomConsultantsSearchService + ` + + const queries = [`$$_pre_consultant$$_post`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['pre'].aliasValue).toBe( + 'Custom', + ) + + expect(matches[0].aliases.identifierAliasesMap['post'].aliasValue).toBe( + 'sSearchService', + ) + }) + + it('should match aliased string wildcard', () => { + const fileContent = ` + const someString = 'pre-content-post' + + someFunction('content'); + ` + + const queries = [ + ` + const someString = 'pre-$$_ref1_-post' + + someFunction('$$_ref1_'); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.stringAliasesMap['ref1'].aliasValue).toBe( + 'content', + ) + }) + + it('should match aliased string wildcard between string literal and template string', () => { + const fileContent = ` + const someString = 'pre-content-post' + + someFunction(\`content\`); + ` + + const queries = [ + ` + const someString = 'pre-$$_ref1_-post' + + someFunction(\`$$_ref1_\`); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.stringAliasesMap['ref1'].aliasValue).toBe( + 'content', + ) + }) + + it('should match aliased string wildcard between string literal and identifier', () => { + const fileContent = ` + const someString = 'pre-content-post' + + someFunction(content); + ` + + const queries = [ + ` + const someString = 'pre-$$_ref1_-post' + + someFunction($$_ref1); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.stringAliasesMap['ref1'].aliasValue).toBe( + 'content', + ) + }) + + it('should match aliased identifier wildcard between identifier and string literal', () => { + const fileContent = ` + const preContentPost = 5 + + someFunction('content'); + ` + + const queries = [ + ` + const pre$$_ref1_Post = 5 + + someFunction('$$_ref1'); + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.identifierAliasesMap['ref1'].aliasValue).toBe( + 'Content', + ) + }) + + if (global.testSettings?.isTraversal) { + // In traversal we only project any node wildcard query to identifiers (for now) + it('should match any node tree many times and produce many aliases', () => { + const fileContent = ` + someFunction('content'); + ` + + const queries = [ + ` + $$$_ref + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect( + matches[0].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`someFunction`) + }) + } else if (parserType === 'esprima' || parserType === 'espree') { + // Esprima and espree do not have top level File node, hence it matches one node less + + it('should match any node tree many times and produce many aliases', () => { + const fileContent = ` + someFunction('content'); + ` + + const queries = [ + ` + $$$_ref + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(4) + + expect( + matches[0].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`someFunction('content');`) + + expect( + matches[1].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`someFunction('content')`) + + expect( + matches[2].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`someFunction`) + + expect( + matches[3].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`'content'`) + }) + } else { + it('should match any node tree many times and produce many aliases', () => { + const fileContent = ` + someFunction('content'); + ` + + const queries = [ + ` + $$$_ref + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(5) + + expect( + matches[0].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`someFunction('content');`) + + expect( + matches[1].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`someFunction('content');`) + + expect( + matches[2].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`someFunction('content')`) + + expect( + matches[3].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`someFunction`) + + expect( + matches[4].aliases.nodesTreeAliasesMap['ref'].aliasValue.trim(), + ).toBe(`'content'`) + }) + } +}) diff --git a/packages/core/__tests__/JavaScript/other/wildcardUtils.test.ts b/packages/core/__tests__/JavaScript/other/wildcardUtils.test.ts new file mode 100644 index 0000000..2c7b0cb --- /dev/null +++ b/packages/core/__tests__/JavaScript/other/wildcardUtils.test.ts @@ -0,0 +1,434 @@ +import { PoorNodeType, WildcardMeta } from '../../../src/types' +import { createWildcardUtils } from '../../../src/wildcardUtilsFactory' +import { regExpTest } from '../../../src/utils' + +describe('AST utils', () => { + const getIdentifierNodeName = (node: PoorNodeType) => node.name as string + const identifierTypes: string[] = ['Identifier'] + const numericWildcard = '0x0' + const wildcardChar = '$' + const wildcardUtils = createWildcardUtils( + identifierTypes, + numericWildcard, + wildcardChar, + getIdentifierNodeName, + ) + + it('should remove identifier ref from wildcard', () => { + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$$_ref1'), + ).toBe('$$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$_ref1'), + ).toBe('$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$something'), + ).toBe('$$something') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$_something'), + ).toBe('$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('asd$$_ref'), + ).toBe('asd$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('asd$$_ref_bcd'), + ).toBe('asd$$bcd') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$_ref_bcd'), + ).toBe('$$bcd') + + // should remove aliases for multiple wildcards + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName( + 'asd$$_ref_bcd$$_efg_ed$$_ac', + ), + ).toBe('asd$$bcd$$ed$$') + + // should not remove if ref is another wildcard + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$$_$$'), + ).toBe('$$$_$$') + + // should not remove ref from invalid wildcard (one wildcard after another) + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName( + 'New$$_ref1_$$_ref2_Value', + ), + ).toBe('New$$_ref1_$$_ref2_Value') + }) + + it('should not remove if ref is in the middle of string', () => { + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$_notRef$$'), + ).toBe('$$_notRef$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$$_notRef$$'), + ).toBe('$$$_notRef$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$notRef_$$'), + ).toBe('$$notRef_$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$$notRef_$$'), + ).toBe('$$$notRef_$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$_notRef_$$'), + ).toBe('$$_notRef_$$') + + expect( + wildcardUtils.removeWildcardAliasesFromIdentifierName('$$$_notRef_$$'), + ).toBe('$$$_notRef_$$') + }) + + describe('Classify string and string with wildcard', () => { + const valid: { value: string; wildcard: string }[] = [ + { value: '$$', wildcard: '$$' }, + { value: '$$$', wildcard: '$$$' }, + { value: '$$_ref', wildcard: '$$' }, + { value: '$$_ref_', wildcard: '$$' }, + { value: '$$$_ref', wildcard: '$$$' }, + { value: 'pre-$$-post', wildcard: 'pre-$$-post' }, + { value: 'pre-$$$-post', wildcard: 'pre-$$$-post' }, + { value: 'pre-$$$_alias_-post', wildcard: 'pre-$$$-post' }, + ] + const invalid = ['_ref', 'id', '', '$'] + + it.each(valid)( + 'Should match string wildcard in %s', + ({ value, wildcard }) => { + const valueWithRemovedWildcard = + wildcardUtils.removeWildcardAliasesFromStringLiteral(value) + + expect(regExpTest(wildcardUtils.anyStringWildcardRegExp, value)).toBe( + true, + ) + + expect(valueWithRemovedWildcard).toBe(wildcard) + }, + ) + + it.each(invalid)( + 'Should not recognise string wildcard in %s', + (str: string) => { + expect(regExpTest(wildcardUtils.anyStringWildcardRegExp, str)).toBe( + false, + ) + }, + ) + }) + + describe('Get wildcard info from identifier node name', () => { + it('should get not aliased wildcard info in identifier without additional string parts', () => { + const identifierName = '$$' + const wildcardInfo = + wildcardUtils.getIdentifierWildcardsFromString(identifierName) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'identifier', + wildcardWithAlias: '$$', + wildcardWithoutAlias: '$$', + wildcardAlias: null, + }, + ]) + }) + + it('should get not aliased wildcard info in identifier with additional string parts', () => { + const identifierName = 'pre$$post' + const wildcardInfo = + wildcardUtils.getIdentifierWildcardsFromString(identifierName) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'identifier', + wildcardWithAlias: '$$', + wildcardWithoutAlias: '$$', + wildcardAlias: null, + }, + ]) + }) + + it('should get aliased wildcard info in identifier without additional string parts', () => { + const identifierName = '$$_ref' + const identifierName2 = '$$_ref_' + + const wildcardInfo1 = + wildcardUtils.getIdentifierWildcardsFromString(identifierName) + const wildcardInfo2 = + wildcardUtils.getIdentifierWildcardsFromString(identifierName2) + + expect(wildcardInfo1).toMatchObject([ + { + wildcardType: 'identifier', + wildcardWithAlias: '$$_ref', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref', + }, + ]) + + expect(wildcardInfo2).toMatchObject([ + { + wildcardType: 'identifier', + wildcardWithAlias: '$$_ref_', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref', + }, + ]) + }) + + it('should get aliased wildcard info in identifier with additional string parts', () => { + const identifierName = 'pre$$_refpost' + const identifierName2 = 'pre$$_ref_post' + + const wildcardInfo1 = + wildcardUtils.getIdentifierWildcardsFromString(identifierName) + const wildcardInfo2 = + wildcardUtils.getIdentifierWildcardsFromString(identifierName2) + + expect(wildcardInfo1).toMatchObject([ + { + wildcardType: 'identifier', + wildcardWithAlias: '$$_refpost', + wildcardWithoutAlias: '$$', + wildcardAlias: 'refpost', + }, + ]) + + expect(wildcardInfo2).toMatchObject([ + { + wildcardType: 'identifier', + wildcardWithAlias: '$$_ref_', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref', + }, + ]) + }) + + it('should get multiple aliased wildcards info in identifier with additional string parts', () => { + const identifierName = 'pre$$_ref1_post$$_ref2' + + const wildcardInfo = + wildcardUtils.getIdentifierWildcardsFromString(identifierName) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'identifier', + wildcardWithAlias: '$$_ref1_', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref1', + }, + { + wildcardType: 'identifier', + wildcardWithAlias: '$$_ref2', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref2', + }, + ]) + }) + + it('should get identifier wildcard alias with camelCase name', () => { + const identifierName = '$$_someRef' + + const wildcardInfo = + wildcardUtils.getIdentifierWildcardsFromString(identifierName) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'identifier', + wildcardWithAlias: '$$_someRef', + wildcardWithoutAlias: '$$', + wildcardAlias: 'someRef', + }, + ]) + }) + + it('should get nodes tree wildcard alias with camelCase name', () => { + const identifierName = '$$$_someRef' + + const wildcardInfo = + wildcardUtils.getIdentifierWildcardsFromString(identifierName) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'nodeTree', + wildcardWithAlias: '$$$_someRef', + wildcardWithoutAlias: '$$$', + wildcardAlias: 'someRef', + }, + ]) + }) + }) + + describe('Get wildcard info from string literal', () => { + it('should get not aliased optional string wildcard info in string without additional parts', () => { + const stringContent = '$$' + const wildcardInfo = + wildcardUtils.getStringWildcardsFromString(stringContent) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$', + wildcardWithoutAlias: '$$', + wildcardAlias: null, + }, + ]) + }) + + it('should get not aliased string wildcard info in string with additional parts', () => { + const stringContent = 'pre$$post' + const wildcardInfo = + wildcardUtils.getStringWildcardsFromString(stringContent) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$', + wildcardWithoutAlias: '$$', + wildcardAlias: null, + }, + ]) + }) + + it('should get aliased optional string wildcard info in string without additional parts', () => { + const stringContent = '$$_ref' + const stringContent2 = '$$_ref_' + + const wildcardInfo1 = + wildcardUtils.getStringWildcardsFromString(stringContent) + const wildcardInfo2 = + wildcardUtils.getStringWildcardsFromString(stringContent2) + + expect(wildcardInfo1).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$_ref', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref', + }, + ]) + + expect(wildcardInfo2).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$_ref_', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref', + }, + ]) + }) + + it('should get aliased optional string wildcard info in string with additional parts', () => { + const stringContent = 'pre$$_refpost' + const stringContent2 = 'pre$$_ref_post' + + const wildcardInfo1 = + wildcardUtils.getStringWildcardsFromString(stringContent) + const wildcardInfo2 = + wildcardUtils.getStringWildcardsFromString(stringContent2) + + expect(wildcardInfo1).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$_refpost', + wildcardWithoutAlias: '$$', + wildcardAlias: 'refpost', + }, + ]) + + expect(wildcardInfo2).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$_ref_', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref', + }, + ]) + }) + + it('should get multiple optional aliased wildcards info in string with additional parts', () => { + const stringContent = 'pre$$_ref1_post$$_ref2' + + const wildcardInfo = + wildcardUtils.getStringWildcardsFromString(stringContent) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$_ref1_', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref1', + }, + { + wildcardType: 'string', + wildcardWithAlias: '$$_ref2', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref2', + }, + ]) + }) + + it('should get optional string wildcard alias with camelCase name', () => { + const stringContent = '$$_someRef' + + const wildcardInfo = + wildcardUtils.getStringWildcardsFromString(stringContent) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$_someRef', + wildcardWithoutAlias: '$$', + wildcardAlias: 'someRef', + }, + ]) + }) + + it('should get required string wildcard alias with camelCase name', () => { + const stringContent = '$$$_someRef' + + const wildcardInfo = + wildcardUtils.getStringWildcardsFromString(stringContent) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$$_someRef', + wildcardWithoutAlias: '$$$', + wildcardAlias: 'someRef', + }, + ]) + }) + + it('should get optional and required aliased wildcards info in string with additional parts', () => { + const stringContent = 'pre$$_ref1_post$$$_ref2' + + const wildcardInfo = + wildcardUtils.getStringWildcardsFromString(stringContent) + + expect(wildcardInfo).toMatchObject([ + { + wildcardType: 'string', + wildcardWithAlias: '$$_ref1_', + wildcardWithoutAlias: '$$', + wildcardAlias: 'ref1', + }, + { + wildcardType: 'string', + wildcardWithAlias: '$$$_ref2', + wildcardWithoutAlias: '$$$', + wildcardAlias: 'ref2', + }, + ]) + }) + }) +}) diff --git a/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX.test.ts b/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX.test.ts new file mode 100644 index 0000000..b9b1091 --- /dev/null +++ b/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX.test.ts @@ -0,0 +1,352 @@ +import { compareCode, parserType } from '../../utils' + +import { searchInStrings } from '../../../src/searchInStrings' + +describe('JSX', () => { + const testFileContent = ` + + + + + + + + + + + + ` + + const mockedFilesList = [ + { + path: 'mock', + content: testFileContent, + }, + ] + + it('Should find JSX by text content regardless formatting', () => { + const query = ` + + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: mockedFilesList, + queryCodes: [query], + }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should ignore all empty JSXText in search', () => { + const queries = [ + ` + <$$> + $$ + ; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: mockedFilesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(3) + + expect( + compareCode( + matches[0].code, + ` + `, + ), + ).toBeTruthy() + }) + + it('Should match code with nested JSX when using wildcard on text content', () => { + const queries = [ + ` + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + files: mockedFilesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect( + compareCode( + matches[0].code, + ` + `, + ), + ).toBeTruthy() + }) + + describe('Self and not self closing JSX tags in include mode', () => { + it('Self-closing JSX tag in query should match also not self-closing tags', () => { + const fileContent = ` + asd; + bbc; + + ; + + + ` + + const queries = [ + ` + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(4) + }) + + it('Not self-closing JSX tag in query should match also self-closing tags', () => { + const fileContent = ` + asd; + bbc; + + ; + + + ` + + const queries = [ + ` + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(4) + }) + + it('Not self-closing JSX tag with children in query should not match self-closing tags', () => { + const fileContent = ` + ; + + + ` + + const queries = [ + ` + asd + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Self-closing JSX tag with prop in query should match also not self-closing tag with prop', () => { + const fileContent = ` + asd; + bbc; + + ; + + + ` + + const queries = [ + ` + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + }) + + describe('JSXIdentifiers like Identifiers', () => { + it('Should match JSXIdentifier when looking for Identifier', () => { + const fileContent = ` + asd; + ` + + const queries = [ + ` + Comp; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should match JSXIdentifier when looking for Identifier wildcard', () => { + const fileContent = ` + asd; + ` + + const queries = [ + ` + Co$$; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + }) + + it('Should not match too much values using wildcards in JSXText', () => { + const fileContent = ` + Edit User - App + ` + + const queries = [ + ` + $$| App |$$; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + if (parserType !== 'esprima') { + it('Should match empty fragment tag', () => { + const fileContent = ` + <> + ` + + const queries = [ + ` + <> + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + } +}) diff --git a/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX2.test.ts b/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX2.test.ts new file mode 100644 index 0000000..e476be9 --- /dev/null +++ b/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX2.test.ts @@ -0,0 +1,317 @@ +import { compareCode } from '../../utils' +import { searchInFileSystem } from '../../../src/searchInFs' + +import { fixturesPath } from '../../utils' +import { getFilesList } from '../../../src/getFilesList' + +import { searchInStrings } from '../../../src/searchInStrings' + +describe('JSX', () => { + it('Should find JSX by tag name and prop', () => { + const fileContent = ` + + + + Dark Theme + + + + + + + ` + const query = ` + + + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find JSX by prop name', () => { + const fileContent = ` + ( +
+ +
+
+ ) + ` + + const query = `<$$ value={$$$} />` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should find JSX by text content', () => { + const fileContent = ` +
+ RTL + TTL +
+ ` + + const query = `RTL` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find JSX by text content regardless formatting', () => { + const fileContent = ` +
+ Some + + Text + +
+ ` + + const query = ` Some Text ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find JSX by text content with wildcard case insensitive', () => { + const fileContent = ` +
+ RTL + RRL +
+ ` + + const query = `r$$L` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + caseInsensitive: true, + }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should find JSX by text content case insensitive', () => { + const fileContent = ` +
+ RTL + RRL +
+ ` + const query = `rtl` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + caseInsensitive: true, + queryCodes: [query], + }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find exact multiline JSX', () => { + const fileContent = ` + const node =
+ + Outlined + + setIsOutlined((prevIsOutlined) => !prevIsOutlined) + } + /> + +
+ ` + const query = ` + + Outlined + + setIsOutlined((prevIsOutlined) => !prevIsOutlined) + } + /> + + ` + const { matches, errors } = searchInStrings({ + mode: 'exact', + files: [{ content: fileContent, path: '' }], + queryCodes: [query], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find usages of component passed as a prop', () => { + const fileContent = ` +
+
( + + )} + /> + ( + + )} + /> +
+ ` + + const query1 = ` + <$$$ + $$={() => ( + + )} + /> + ` + + const query2 = ` + <$$$ + $$={IconButton} + /> + ` + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: [query1, query2], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should find anonymous function passed as a prop', () => { + const fileContent = ` + _setDrawerItem(index)} + /> + ` + + const queries = [ + ` + <$$$ + $$={() => $$$} + /> + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find anonymous functions passed as event listener handler', () => { + const fileContent = ` + _setDrawerItem(index)} + /> + ` + const queries = [ + ` + <$$$ + on$$={() => $$$} + /> + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find Elements pretending to be a wrapper', () => { + const fileContent = ` +
+ + +
+
+
+ ` + + const queries = [ + ` + <$$Wrapper/> + `, + ` + <$$Wrapper> + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should find title prop values which are strings', () => { + const fileContent = ` +
+
+
+
+ ` + + const queries = [ + ` + <$$$ title="$$" /> + `, + ` + <$$$ title="$$"> + + `, + ` + <$$$ title={"$$"} /> + `, + ` + <$$$ title={"$$"}> + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) +}) diff --git a/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/other.test.ts b/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/other.test.ts new file mode 100644 index 0000000..f19eaac --- /dev/null +++ b/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/other.test.ts @@ -0,0 +1,84 @@ +import { searchInStrings } from '../../../src/searchInStrings' + +describe('', () => { + it('should match possible falsy event listeners', () => { + const fileContent = ` +
+
+
+
+
+ ` + + const queries = [ + ` + <$$ + $$={$$$ && $$$} + /> + `, + ` + <$$ + $$={$$$ && $$$} + > + + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('should find all JSX props which always creates new reference', () => { + const fileContent = ` +
+
{}} + /> +
+
+
+
+ ` + + const queries = [ + ` + <$$ + $$={()=>{}} + /> + `, + ` + <$$ + $$={[]} + /> + `, + ` + <$$ + $$={{}} + /> + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(3) + }) +}) diff --git a/packages/core/__tests__/JavaScriptWithJSX/other/astUtils.test.ts b/packages/core/__tests__/JavaScriptWithJSX/other/astUtils.test.ts new file mode 100644 index 0000000..76ecc39 --- /dev/null +++ b/packages/core/__tests__/JavaScriptWithJSX/other/astUtils.test.ts @@ -0,0 +1,150 @@ +import { compareCode } from '../../utils' +import { createWildcardUtils } from '../../../src/wildcardUtilsFactory' +import { PoorNodeType } from '../../../src/types' +import { sortByLeastIdentifierStrength } from '../../../src/astUtils' + +describe('AST utils', () => { + it('should compare code as equal', () => { + const code1 = ` + import * as React from 'react'; + import { Paragraph, Button, Portal, Dialog, Colors } from 'react-native-paper'; + + const DialogWithCustomColors = ({ + visible, + close, + }) => ( + + + Alert + + + This is a dialog with custom colors + + + + + + + + ); + + export default DialogWithCustomColors; + ` + + const code2 = ` + import * as React from 'react'; + import { + Paragraph, + Button, + Portal, + Dialog, + Colors + } from 'react-native-paper'; + + const DialogWithCustomColors = ({ + visible, + close, + }) => ( + + + Alert + + This is a dialog with custom colors + + + + + + + ); + + export default DialogWithCustomColors; + ` + expect(compareCode(code1, code2)).toBeTruthy() + }) + + it('should compare code as unequal', () => { + const code1 = ` + import * as React from 'react'; + import { Paragraph, Button, Portal, Dialog, Colors } from 'react-native-paper'; + + const DialogWithCustomColors = ({ + visible, + close, + }) => ( + + + Alert + + + This is a dialog with custom colors + + + + + + + + ); + + export default DialogWithCustomColors; + ` + + const code2 = + // no Colors import + + ` + import * as React from 'react'; + import { + Paragraph, + Button, + Portal, + Dialog + } from 'react-native-paper'; + + const DialogWithCustomColors = ({ + visible, + close, + }) => ( + + + Alert + + + This is a dialog with custom colors + + + + + + + + ); + + export default DialogWithCustomColors; + ` + expect(compareCode(code1, code2)).toBe(false) + }) +}) diff --git a/packages/core/__tests__/JavaScriptWithJSX/other/parseQuery.test.ts b/packages/core/__tests__/JavaScriptWithJSX/other/parseQuery.test.ts new file mode 100644 index 0000000..4b2fb94 --- /dev/null +++ b/packages/core/__tests__/JavaScriptWithJSX/other/parseQuery.test.ts @@ -0,0 +1,55 @@ +import { getUniqueTokens, extractQueryNode } from '../../../src/parseQuery' +import { getParserSettings } from '../../utils' + +describe('parse query', () => { + const parserSettings = getParserSettings() + + it('should get unique tokens', () => { + const queryCode = ` + require('some$$wildcard$$string') + const a = 'b' + const alpha = 'beta' + () + 123; + pre$$_ref1_post + $$_ref1_content$$_ref2 + asd$$_invalidRef_$$ + asd$$_invalidRef$$ + { + { + () => { + 0x0; + return 'test' + } + } + } + f('some$$_ref1_tttt$$_ref2') + ` + const { queryNode } = extractQueryNode( + parserSettings.parseCode(queryCode), + parserSettings, + ) + + const uniqueTokens = [...getUniqueTokens(queryNode, false, parserSettings)] + + expect(uniqueTokens).toMatchObject([ + 'require', + 'some', + 'wildcard', + 'string', + 'alpha', + 'beta', + 'SomeJSX', + '123', + 'pre', + 'post', + 'content', + 'asd', + '_invalidRef_', + '_invalidRef', + 'test', + // 'some', // only 'tttt' is new + 'tttt', + ]) + }) +}) diff --git a/packages/core/__tests__/search/textSearch.test.ts b/packages/core/__tests__/TextSearch/textSearch.test.ts similarity index 95% rename from packages/core/__tests__/search/textSearch.test.ts rename to packages/core/__tests__/TextSearch/textSearch.test.ts index 5a994ac..1aef5db 100644 --- a/packages/core/__tests__/search/textSearch.test.ts +++ b/packages/core/__tests__/TextSearch/textSearch.test.ts @@ -1,15 +1,16 @@ -import { getFilesList } from '/getFilesList' +import { getFilesList } from '../../src/getFilesList' import path from 'path' -import { searchInFileSystem } from '/searchInFs' +import { searchInFileSystem } from '../../src/searchInFs' import dedent from 'dedent' -import searchInStrings from '/searchInStrings' +import searchInStrings from '../../src/searchInStrings' +import { fixturesPath, fixturesOtherPath } from '../utils' describe('Text search mode', () => { let filesList = [] as string[] beforeAll(async () => { filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) }) @@ -273,9 +274,7 @@ describe('Text search mode', () => { `, ], - filePaths: [ - path.resolve(__dirname, '__fixturesOther__', 'textSearch.ts'), - ], + filePaths: [fixturesOtherPath + '/textSearch.ts'], mode: 'text', caseInsensitive: true, }) diff --git a/packages/core/__tests__/TypeScript/matchCodePatterns/assignmentPattern.test.ts b/packages/core/__tests__/TypeScript/matchCodePatterns/assignmentPattern.test.ts new file mode 100644 index 0000000..2a51bb1 --- /dev/null +++ b/packages/core/__tests__/TypeScript/matchCodePatterns/assignmentPattern.test.ts @@ -0,0 +1,65 @@ +import { searchInStrings } from '../../../src/searchInStrings' + +describe('AssignmentPattern improvements in include mode', () => { + it('should match assignment pattern in function arguments type annotation', () => { + const fileContent = ` + function some(param: [] | null = null) { + + } + ` + + const queries = [ + ` + function some(param: [] | null) { + + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should not match assignment pattern in function arguments with wildcard but without types', () => { + const fileContent = ` + function some(param = null) { + + } + ` + + const queries = [ + ` + function some($$: [] | null = null) { + + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) +}) diff --git a/packages/core/__tests__/TypeScript/matchCodePatterns/functionsAndTypes.test.ts b/packages/core/__tests__/TypeScript/matchCodePatterns/functionsAndTypes.test.ts new file mode 100644 index 0000000..f2f6fb9 --- /dev/null +++ b/packages/core/__tests__/TypeScript/matchCodePatterns/functionsAndTypes.test.ts @@ -0,0 +1,242 @@ +import { searchInStrings } from '../../../src/searchInStrings' +import { compareCode } from '../../utils' + +describe('functions', () => { + const fileContent = ` + const onScroll = ({ + nativeEvent + }: NativeSyntheticEvent) => { + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + if (!isIOS) { + return velocity.setValue(currentScrollPosition); + } + + setExtended(currentScrollPosition <= 0); + }; + ` + + it('should match exact function with body', () => { + const queries = [ + ` + const onScroll = ({ + nativeEvent + }: NativeSyntheticEvent) => { + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + if (!isIOS) { + return velocity.setValue(currentScrollPosition); + } + + setExtended(currentScrollPosition <= 0); + }; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(compareCode(matches[0].code, queries[0])).toBeTruthy() + }) + + it('should match function with body statements in order with exact statements', () => { + const queries = [ + ` + const onScroll = ({ + nativeEvent + }: NativeSyntheticEvent) => { + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + + if (!isIOS) { + return velocity.setValue(currentScrollPosition); + } + + setExtended(currentScrollPosition <= 0); + + }; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include-with-order', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match function with body statements in order but without all statements', () => { + const queries = [ + ` + const onScroll = ({ + nativeEvent + }: NativeSyntheticEvent) => { + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + + if (!isIOS) { + return velocity.setValue(currentScrollPosition); + } + + }; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include-with-order', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should not match function with body statements in different order', () => { + const queries = [ + ` + const onScroll = ({ + nativeEvent + }: NativeSyntheticEvent) => { + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + setExtended(currentScrollPosition <= 0); + + if (!isIOS) { + return velocity.setValue(currentScrollPosition); + } + + }; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include-with-order', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('should not match function with body statements in different order without all statements', () => { + const queries = [ + ` + const onScroll = ({ + nativeEvent + }: NativeSyntheticEvent) => { + + if (!isIOS) { + return velocity.setValue(currentScrollPosition); + } + + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + }; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include-with-order', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('should match function with body statements in different order', () => { + const queries = [ + ` + const onScroll = ({ + nativeEvent + }: NativeSyntheticEvent) => { + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + setExtended(currentScrollPosition <= 0); + + if (!isIOS) { + return velocity.setValue(currentScrollPosition); + } + + }; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match function with body statements in different order without all statements', () => { + const queries = [ + ` + const onScroll = ({ + nativeEvent + }: NativeSyntheticEvent) => { + + if (!isIOS) { + return velocity.setValue(currentScrollPosition); + } + + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + }; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match inline types in function params', () => { + const fileContent = ` + const onScroll = ({ + onClick + }: { onClick : () => string }) => { + const currentScrollPosition = Math.floor(nativeEvent?.contentOffset?.y) ?? 0; + + setExtended(currentScrollPosition <= 0); + }; + ` + const queries = [ + ` + const $$ = ({ + $$, + }: { + $$: () => $$$; + }) => {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) +}) diff --git a/packages/core/__tests__/TypeScript/matchCodePatterns/other.test.ts b/packages/core/__tests__/TypeScript/matchCodePatterns/other.test.ts new file mode 100644 index 0000000..684c694 --- /dev/null +++ b/packages/core/__tests__/TypeScript/matchCodePatterns/other.test.ts @@ -0,0 +1,77 @@ +import { useTraverseApproachTestOnly } from '../../../src/testOnlyConfig' +import { searchInFileSystem } from '../../../src/searchInFs' + +import { searchInStrings } from '../../../src/searchInStrings' + +describe('other', () => { + it('should match cast to any', () => { + const fileContent = ` + const val = 5 as any + const val2 = (fn() as any) as MyType + ` + + const queries = [ + ` + ($$$ as any) + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + files: [{ content: fileContent, path: '' }], + + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('should match anything', () => { + const fileContent = ` + const a:Object = { + val : 5 + } + ` + + const queries = [ + ` + $$$ + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + // In traversal we only project query to identifier nodes + const expectedMatchesCount = global.testSettings?.isTraversal ? 3 : 10 + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(expectedMatchesCount) + }) + + it('should not include the same result twice', () => { + const fileContent = `type MyType = ScrollViewProps & BoxProps` + + const queries = [ + ` + type $$ = ScrollViewProps & $$$ + `, + ` + type $$ = $$$ & ScrollViewProps + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) +}) diff --git a/packages/core/__tests__/search/types.test.ts b/packages/core/__tests__/TypeScript/matchCodePatterns/types.test.ts similarity index 91% rename from packages/core/__tests__/search/types.test.ts rename to packages/core/__tests__/TypeScript/matchCodePatterns/types.test.ts index e6b1bc5..6e68973 100644 --- a/packages/core/__tests__/search/types.test.ts +++ b/packages/core/__tests__/TypeScript/matchCodePatterns/types.test.ts @@ -1,14 +1,14 @@ -import { searchInFileSystem } from '/searchInFs' -import path from 'path' -import { getFilesList } from '/getFilesList' -import { searchInStrings } from '../../src/searchInStrings' +import { searchInFileSystem } from '../../../src/searchInFs' +import { fixturesPath } from '../../utils' +import { getFilesList } from '../../../src/getFilesList' +import { searchInStrings } from '../../../src/searchInStrings' describe('Types', () => { let filesList = [] as string[] beforeAll(async () => { filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) }) @@ -61,7 +61,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -78,7 +78,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -95,7 +95,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -112,7 +112,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(3) }) @@ -131,7 +131,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(5) }) @@ -150,7 +150,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -169,7 +169,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -188,7 +188,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -207,7 +207,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -224,7 +224,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -241,7 +241,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -258,7 +258,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -275,7 +275,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -292,7 +292,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -309,7 +309,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -440,7 +440,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -458,7 +458,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -476,7 +476,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -495,7 +495,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -514,7 +514,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -533,7 +533,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -553,7 +553,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -573,7 +573,7 @@ describe('Types', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(0) }) @@ -602,7 +602,7 @@ describe('Types', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(3) }) @@ -631,7 +631,7 @@ describe('Types', () => { ], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(3) }) }) diff --git a/packages/core/__tests__/astUtils.test.ts b/packages/core/__tests__/TypeScript/other/astUtils.test.ts similarity index 74% rename from packages/core/__tests__/astUtils.test.ts rename to packages/core/__tests__/TypeScript/other/astUtils.test.ts index 991ac47..2ee0848 100644 --- a/packages/core/__tests__/astUtils.test.ts +++ b/packages/core/__tests__/TypeScript/other/astUtils.test.ts @@ -1,5 +1,4 @@ -import { compareCode } from './utils' -import { createWildcardUtils } from '/wildcardUtilsFactory' +import { compareCode } from '../../utils' describe('AST utils', () => { it('should compare code as equal', () => { @@ -38,12 +37,12 @@ describe('AST utils', () => { const code2 = ` import * as React from 'react'; - import { + import { Paragraph, - Button, - Portal, - Dialog, - Colors + Button, + Portal, + Dialog, + Colors } from 'react-native-paper'; const DialogWithCustomColors = ({ @@ -118,11 +117,11 @@ describe('AST utils', () => { ` import * as React from 'react'; - import { - Paragraph, - Button, - Portal, - Dialog + import { + Paragraph, + Button, + Portal, + Dialog } from 'react-native-paper'; const DialogWithCustomColors = ({ @@ -157,43 +156,4 @@ describe('AST utils', () => { ` expect(compareCode(code1, code2)).toBe(false) }) - - it('should remove identifier ref from wildcard', () => { - const identifierTypes: string[] = [] // not needed for this test - const numericWildcard = '0x0' - const wildcardChar = '$' - const wildcardUtils = createWildcardUtils( - identifierTypes, - numericWildcard, - wildcardChar, - ) - - expect(wildcardUtils.removeIdentifierRefFromWildcard('$$$_ref1')).toBe( - '$$$', - ) - - expect(wildcardUtils.removeIdentifierRefFromWildcard('$$_ref1')).toBe('$$') - - expect(wildcardUtils.removeIdentifierRefFromWildcard('$$something')).toBe( - '$$something', - ) - - expect(wildcardUtils.removeIdentifierRefFromWildcard('$$_something')).toBe( - '$$', - ) - - expect(wildcardUtils.removeIdentifierRefFromWildcard('asd$$_ref')).toBe( - 'asd$$_ref', - ) - - // should not remove if ref is another wildcard - expect(wildcardUtils.removeIdentifierRefFromWildcard('$$$_$$')).toBe( - '$$$_$$', - ) - - // should not remove if ref is in the middle of string - expect(wildcardUtils.removeIdentifierRefFromWildcard('$$$_notRef_$$')).toBe( - '$$$_notRef_$$', - ) - }) }) diff --git a/packages/core/__tests__/parseQuery.test.ts b/packages/core/__tests__/TypeScript/other/parseQuery.test.ts similarity index 65% rename from packages/core/__tests__/parseQuery.test.ts rename to packages/core/__tests__/TypeScript/other/parseQuery.test.ts index 43ae79b..71de0b2 100644 --- a/packages/core/__tests__/parseQuery.test.ts +++ b/packages/core/__tests__/TypeScript/other/parseQuery.test.ts @@ -1,5 +1,5 @@ -import { getUniqueTokens, extractQueryNode } from '../src/parseQuery' -import { getParserSettings } from './utils' +import { getUniqueTokens, extractQueryNode } from '../../../src/parseQuery' +import { getParserSettings } from '../../utils' describe('parse query', () => { const parserSettings = getParserSettings() @@ -11,6 +11,10 @@ describe('parse query', () => { const alpha = 'beta' type MyType = boolean 123; + pre$$_ref1_post + $$_ref1_content$$_ref2 + asd$$_invalidRef_$$ + asd$$_invalidRef$$ { { () => { @@ -19,6 +23,7 @@ describe('parse query', () => { } } } + f('some$$_ref1_tttt$$_ref2') ` const { queryNode } = extractQueryNode( parserSettings.parseCode(queryCode), @@ -36,7 +41,15 @@ describe('parse query', () => { 'beta', 'MyType', '123', + 'pre', + 'post', + 'content', + 'asd', + '_invalidRef_', + '_invalidRef', 'test', + // 'some', // only 'tttt' is new + 'tttt', ]) }) }) diff --git a/packages/core/__tests__/searchMultiThread.test.ts b/packages/core/__tests__/TypeScript/other/searchMultiThread.test.ts similarity index 88% rename from packages/core/__tests__/searchMultiThread.test.ts rename to packages/core/__tests__/TypeScript/other/searchMultiThread.test.ts index 57ae995..c6fbb9b 100644 --- a/packages/core/__tests__/searchMultiThread.test.ts +++ b/packages/core/__tests__/TypeScript/other/searchMultiThread.test.ts @@ -1,9 +1,9 @@ -import { searchMultiThread as searchMultiThread } from '/searchMultiThread' -import { searchInFileSystem } from '/searchInFs' +import { searchMultiThread as searchMultiThread } from '../../../src/searchMultiThread' +import { searchInFileSystem } from '../../../src/searchInFs' -import { compareCode } from './utils' +import { compareCode, fixturesPath } from '../../utils' import path from 'path' -import { getFilesList } from '/getFilesList' +import { getFilesList } from '../../../src/getFilesList' jest.mock('worker_threads', () => { const actual = jest.requireActual('worker_threads') @@ -22,7 +22,7 @@ jest.mock('worker_threads', () => { it('should search using multiple threads and give the same matches count as single thread search', async () => { const filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, 'search', '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) const query = ` @@ -80,7 +80,7 @@ it('should search using multiple threads and give the same matches count as sing it('Should report each match separately for structural search', async () => { const filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, 'search', '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) @@ -107,7 +107,7 @@ it('Should report each match separately for structural search', async () => { it('Should report each match separately for text search', async () => { const filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, 'search', '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) diff --git a/packages/core/__tests__/search/JSX.test.ts b/packages/core/__tests__/TypeScript/searchSmoke/JSX.test.ts similarity index 51% rename from packages/core/__tests__/search/JSX.test.ts rename to packages/core/__tests__/TypeScript/searchSmoke/JSX.test.ts index cd42bf5..ae0fb14 100644 --- a/packages/core/__tests__/search/JSX.test.ts +++ b/packages/core/__tests__/TypeScript/searchSmoke/JSX.test.ts @@ -1,51 +1,19 @@ -import { compareCode } from '../utils' -import { searchInFileSystem } from '/searchInFs' +import { compareCode } from '../../utils' +import { searchInFileSystem } from '../../../src/searchInFs' -import path from 'path' -import { searchInStrings } from '../../src/searchInStrings' -import { getFilesList } from '/getFilesList' +import { fixturesPath } from '../../utils' +import { getFilesList } from '../../../src/getFilesList' describe('JSX', () => { let filesList = [] as string[] beforeAll(async () => { filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) }) - const testFileContent = ` - <> - - - - - - - - - - - ` - - const mockedFilesList = [ - { - path: 'mock', - content: testFileContent, - }, - ] - it('Should find all self-closing JSX', () => { const query = `<$$ />` const { matches, errors } = searchInFileSystem({ @@ -111,26 +79,10 @@ describe('JSX', () => { filePaths: filesList, queryCodes: [query], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) - it('Should find JSX by text content regardless formatting', () => { - const query = ` - - ` - const { matches, errors } = searchInStrings({ - mode: 'include', - files: mockedFilesList, - queryCodes: [query], - }) - expect(errors.length).toBe(0) - expect(matches.length).toBe(2) - }) - it('Should find JSX by text content with wildcard case insensitive', () => { const query = `r$$L` const { matches, errors } = searchInFileSystem({ @@ -139,7 +91,7 @@ describe('JSX', () => { queryCodes: [query], caseInsensitive: true, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -151,7 +103,7 @@ describe('JSX', () => { caseInsensitive: true, queryCodes: [query], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -228,7 +180,7 @@ describe('JSX', () => { queryCodes: [query1, query2], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -350,275 +302,4 @@ describe('JSX', () => { expect(errors).toHaveLength(0) expect(matches.length).toBe(78) }) - - it('Should ignore all empty JSXText in search', () => { - const queries = [ - ` - <$$> - $$ - ; - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - files: mockedFilesList, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(3) - - expect( - compareCode( - matches[0].code, - ` - `, - ), - ).toBeTruthy() - }) - - it('Should match code with nested JSX when using wildcard on text content', () => { - const queries = [ - ` - ; - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - files: mockedFilesList, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - - expect( - compareCode( - matches[0].code, - ` - `, - ), - ).toBeTruthy() - }) - - describe('Self and not self closing JSX tags in include mode', () => { - it('Self-closing JSX tag in query should match also not self-closing tags', () => { - const fileContent = ` - asd; - bbc; - - ; - - - ` - - const queries = [ - ` - - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(4) - }) - - it('Not self-closing JSX tag in query should match also self-closing tags', () => { - const fileContent = ` - asd; - bbc; - - ; - - - ` - - const queries = [ - ` - - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(4) - }) - - it('Not self-closing JSX tag with children in query should not match self-closing tags', () => { - const fileContent = ` - ; - - - ` - - const queries = [ - ` - asd - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(0) - }) - - it('Self-closing JSX tag with prop in query should match also not self-closing tag with prop', () => { - const fileContent = ` - asd; - bbc; - - ; - - - ` - - const queries = [ - ` - - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(2) - }) - }) - - describe('JSXIdentifiers like Identifiers', () => { - it('Should match JSXIdentifier when looking for Identifier', () => { - const fileContent = ` - asd; - ` - - const queries = [ - ` - Comp; - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(2) - }) - - it('Should match JSXIdentifier when looking for Identifier wildcard', () => { - const fileContent = ` - asd; - ` - - const queries = [ - ` - Co$$; - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(2) - }) - }) - - it('Should not match too much values using wildcards in JSXText', () => { - const fileContent = ` - Edit Client - Dweet - ` - - const queries = [ - ` - $$| Dweet |$$; - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(0) - }) }) diff --git a/packages/core/__tests__/TypeScript/searchSmoke/blocks.test.ts b/packages/core/__tests__/TypeScript/searchSmoke/blocks.test.ts new file mode 100644 index 0000000..f99c32c --- /dev/null +++ b/packages/core/__tests__/TypeScript/searchSmoke/blocks.test.ts @@ -0,0 +1,79 @@ +import { searchInFileSystem } from '../../../src/searchInFs' +import { compareCode } from '../../utils' + +import { fixturesPath } from '../../utils' +import { getFilesList } from '../../../src/getFilesList' + +describe('blocks', () => { + let filesList = [] as string[] + + beforeAll(async () => { + filesList = await getFilesList({ + searchRoot: fixturesPath, + omitGitIgnore: true, + }) + }) + + it('should match exact whole block', () => { + const queries = [ + ` + () => { + toggleRTL(); + I18nManager.forceRTL(!isRTL); + Updates.reloadAsync(); + } + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'exact', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(compareCode(matches[0].code, queries[0])).toBeTruthy() + }) + + it('should match block using query without all statements and different order', () => { + const queries = [ + ` + () => { + Updates.reloadAsync(); + toggleRTL(); + } + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match block using query without all statements, but with order', () => { + const queries = [ + ` + () => { + toggleRTL(); + Updates.reloadAsync(); + } + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include-with-order', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) +}) diff --git a/packages/core/__tests__/search/codePatterns.test.ts b/packages/core/__tests__/TypeScript/searchSmoke/codePatterns.test.ts similarity index 89% rename from packages/core/__tests__/search/codePatterns.test.ts rename to packages/core/__tests__/TypeScript/searchSmoke/codePatterns.test.ts index e0d07fa..fef8953 100644 --- a/packages/core/__tests__/search/codePatterns.test.ts +++ b/packages/core/__tests__/TypeScript/searchSmoke/codePatterns.test.ts @@ -1,15 +1,15 @@ -import { searchInFileSystem } from '/searchInFs' -import { compareCode } from '../utils' +import { searchInFileSystem } from '../../../src/searchInFs' +import { compareCode } from '../../utils' -import path from 'path' -import { getFilesList } from '/getFilesList' +import { fixturesPath } from '../../utils' +import { getFilesList } from '../../../src/getFilesList' describe('code patterns', () => { let filesList = [] as string[] beforeAll(async () => { filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) }) @@ -41,7 +41,7 @@ describe('code patterns', () => { }; ` - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(10) expect(compareCode(matches[0].code, firstResult)).toBeTruthy() }) @@ -67,7 +67,7 @@ describe('code patterns', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -166,7 +166,7 @@ describe('code patterns', () => { filePaths: filesList, queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -183,7 +183,7 @@ describe('code patterns', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -197,7 +197,7 @@ describe('code patterns', () => { queryCodes: [query], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(3) expect(matches[2].code).toBe("console.log('Pressed')") @@ -216,7 +216,7 @@ describe('code patterns', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(6) }) @@ -233,7 +233,7 @@ describe('code patterns', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(0) }) }) diff --git a/packages/core/__tests__/search/functions.test.ts b/packages/core/__tests__/TypeScript/searchSmoke/functions.test.ts similarity index 74% rename from packages/core/__tests__/search/functions.test.ts rename to packages/core/__tests__/TypeScript/searchSmoke/functions.test.ts index 6b1bb08..3b31977 100644 --- a/packages/core/__tests__/search/functions.test.ts +++ b/packages/core/__tests__/TypeScript/searchSmoke/functions.test.ts @@ -1,8 +1,8 @@ -import { searchInFileSystem } from '/searchInFs' -import { compareCode } from '../utils' -import { searchInStrings } from '/searchInStrings' -import path from 'path' -import { getFilesList } from '/getFilesList' +import { searchInFileSystem } from '../../../src/searchInFs' +import { compareCode, parserType } from '../../utils' +import { searchInStrings } from '../../../src/searchInStrings' +import { fixturesPath } from '../../utils' +import { getFilesList } from '../../../src/getFilesList' import fs from 'fs' describe('functions', () => { @@ -10,24 +10,11 @@ describe('functions', () => { beforeAll(async () => { filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) }) - const testFileContent = ` - (a,b,c) => {}; - (a,d) => {}; - (a, { b}) => {}; - ` - - const mockedFilesList = [ - { - path: 'mock', - content: testFileContent, - }, - ] - it('should match inline types in function params', () => { const queries = [ ` @@ -52,7 +39,7 @@ describe('functions', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(4) }) @@ -79,7 +66,7 @@ describe('functions', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) expect(compareCode(matches[0].code, queries[0])).toBeTruthy() @@ -109,7 +96,7 @@ describe('functions', () => { filePaths: filesList, queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -136,7 +123,7 @@ describe('functions', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -164,7 +151,7 @@ describe('functions', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(0) }) @@ -191,7 +178,7 @@ describe('functions', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(0) }) @@ -219,7 +206,7 @@ describe('functions', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -246,58 +233,7 @@ describe('functions', () => { queryCodes: queries, }) - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - }) - - it('should match function with 2 arguments', () => { - const queries = [ - ` - ($$_ref1, $$_ref2) => {} - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - files: mockedFilesList, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(2) - }) - - it('should match function with 2 arguments using double wildcard', () => { - const queries = [ - ` - ($$_ref1, $$$_ref2) => {} - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - files: mockedFilesList, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(3) - }) - - it('should match function with 3 arguments', () => { - const queries = [ - ` - ($$_ref1, $$_ref2, $$_ref3) => {} - `, - ] - - const { matches, errors } = searchInStrings({ - mode: 'include', - files: mockedFilesList, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) }) diff --git a/packages/core/__tests__/search/import.test.ts b/packages/core/__tests__/TypeScript/searchSmoke/import.test.ts similarity index 88% rename from packages/core/__tests__/search/import.test.ts rename to packages/core/__tests__/TypeScript/searchSmoke/import.test.ts index 8db65aa..b4b689f 100644 --- a/packages/core/__tests__/search/import.test.ts +++ b/packages/core/__tests__/TypeScript/searchSmoke/import.test.ts @@ -1,14 +1,14 @@ -import { searchInFileSystem } from '/searchInFs' +import { searchInFileSystem } from '../../../src/searchInFs' -import path from 'path' -import { getFilesList } from '/getFilesList' +import { fixturesPath } from '../../utils' +import { getFilesList } from '../../../src/getFilesList' -describe('JSX', () => { +describe('Import', () => { let filesList = [] as string[] beforeAll(async () => { filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), + searchRoot: fixturesPath, omitGitIgnore: true, }) }) @@ -26,7 +26,7 @@ describe('JSX', () => { queryCodes: [query], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) @@ -43,7 +43,7 @@ describe('JSX', () => { queryCodes: [query], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(0) }) @@ -100,7 +100,7 @@ describe('JSX', () => { queryCodes: [query], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -114,7 +114,7 @@ describe('JSX', () => { queryCodes: [query], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) @@ -129,7 +129,7 @@ describe('JSX', () => { queryCodes: [query], }) - expect(errors.length).toBe(0) + expect(errors).toHaveLength(0) expect(matches.length).toBe(6) }) }) diff --git a/packages/core/__tests__/TypeScript/searchSmoke/multiStatement.test.ts b/packages/core/__tests__/TypeScript/searchSmoke/multiStatement.test.ts new file mode 100644 index 0000000..64d1a92 --- /dev/null +++ b/packages/core/__tests__/TypeScript/searchSmoke/multiStatement.test.ts @@ -0,0 +1,152 @@ +import { searchInFileSystem } from '../../../src/searchInFs' +import { compareCode, fixturesPath } from '../../utils' + +import { getFilesList } from '../../../src/getFilesList' + +describe('multi statements', () => { + let filesList = [] as string[] + + beforeAll(async () => { + filesList = await getFilesList({ + searchRoot: fixturesPath, + omitGitIgnore: true, + }) + }) + + it('should match three expressions without block wrapper in function body', () => { + const queries = [ + ` + toggleRTL(); + I18nManager.forceRTL(!isRTL); + Updates.reloadAsync(); + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match three expressions without block wrapper in function body with exact mode', () => { + const queries = [ + ` + toggleRTL(); + I18nManager.forceRTL(!isRTL); + Updates.reloadAsync(); + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'exact', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match three expressions without block wrapper in function body with different order', () => { + const queries = [ + ` + Updates.reloadAsync(); + I18nManager.forceRTL(!isRTL); + toggleRTL(); + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match three expressions with block wrapper in function body', () => { + const queries = [ + ` + { + toggleRTL(); + I18nManager.forceRTL(!isRTL); + Updates.reloadAsync(); + } + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should match two expressions in program body and include middle line in result', () => { + const queries = [ + ` + import { createStackNavigator } from '@react-navigation/stack'; + const Stack = createStackNavigator(); + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].code.split('\n').filter(Boolean)).toHaveLength(3) + }) + + it('should match three expressions in program body and only include them in result (without whole block)', () => { + const queries = [ + ` + import { createStackNavigator } from '@react-navigation/stack' + import ExampleList, { examples } from './ExampleList' + const Stack = createStackNavigator() + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(compareCode(matches[0].code, queries[0])).toBeTruthy() + }) + + it('should not match two expressions in program body if order does not match', () => { + const queries = [ + ` + const Stack = createStackNavigator(); + import { createStackNavigator } from '@react-navigation/stack'; + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include-with-order', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) +}) diff --git a/packages/core/__tests__/TypeScript/searchSmoke/objects.test.ts b/packages/core/__tests__/TypeScript/searchSmoke/objects.test.ts new file mode 100644 index 0000000..8030844 --- /dev/null +++ b/packages/core/__tests__/TypeScript/searchSmoke/objects.test.ts @@ -0,0 +1,33 @@ +import { getFilesList } from '../../../src/getFilesList' +import { searchInFileSystem } from '../../../src/searchInFs' +import { fixturesPath } from '../../utils' + +describe('Objects', () => { + it('should match possibly repeated object properties', async () => { + const filesList = await getFilesList({ + searchRoot: fixturesPath, + omitGitIgnore: true, + }) + + const queries = [ + ` + StyleSheet.create({ + $$: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + }); + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) +}) diff --git a/packages/core/__tests__/TypeScript/searchSmoke/other.test.ts b/packages/core/__tests__/TypeScript/searchSmoke/other.test.ts new file mode 100644 index 0000000..a899511 --- /dev/null +++ b/packages/core/__tests__/TypeScript/searchSmoke/other.test.ts @@ -0,0 +1,95 @@ +import { fixturesPath } from '../../utils' +import { useTraverseApproachTestOnly } from '../../../src/testOnlyConfig' +import { getFilesList } from '../../../src/getFilesList' +import { searchInFileSystem } from '../../../src/searchInFs' + +describe('Other', () => { + let filesList = [] as string[] + + beforeAll(async () => { + filesList = await getFilesList({ + searchRoot: fixturesPath, + omitGitIgnore: true, + }) + }) + + it('should not include the same result twice', () => { + const queries = [ + ` + type $$ = ScrollViewProps & $$$ + `, + ` + type $$ = $$$ & ScrollViewProps + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('should not include the same result twice 2', () => { + const queries = [ + ` + <$$$ + $$={() => {}} + /> + `, + ` + <$$$ + $$={() => $$$} + /> + `, + ` + <$$$ + $$={() => {}} + > + + `, + ` + <$$$ + $$={() => $$$} + > + + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(190) + }) + + it('should match anything', () => { + const queries = [ + ` + $$$ + `, + ] + + const { matches, errors } = searchInFileSystem({ + mode: 'include', + filePaths: filesList, + queryCodes: queries, + }) + + const countForTraversalMode = 6381 // will just match identifier-like nodes + const countForNonTraversalMode = 17149 // will match any node + + const expectedCount = useTraverseApproachTestOnly + ? countForTraversalMode + : countForNonTraversalMode + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(expectedCount) + }) +}) diff --git a/packages/core/__tests__/search/__fixturesOther__/textSearch.ts b/packages/core/__tests__/__fixturesOther__/textSearch.ts similarity index 100% rename from packages/core/__tests__/search/__fixturesOther__/textSearch.ts rename to packages/core/__tests__/__fixturesOther__/textSearch.ts diff --git a/packages/core/__tests__/getFilesList.test.ts b/packages/core/__tests__/common/getFilesList.test.ts similarity index 99% rename from packages/core/__tests__/getFilesList.test.ts rename to packages/core/__tests__/common/getFilesList.test.ts index 74452fc..5c8b144 100644 --- a/packages/core/__tests__/getFilesList.test.ts +++ b/packages/core/__tests__/common/getFilesList.test.ts @@ -1,5 +1,9 @@ import mockFs from 'mock-fs' -import { getFilesList, getFsRoot, filterIncludeExclude } from '/getFilesList' +import { + getFilesList, + getFsRoot, + filterIncludeExclude, +} from '../../src/getFilesList' import dedent from 'dedent' afterEach(() => { diff --git a/packages/core/__tests__/utils.test.ts b/packages/core/__tests__/common/utils.test.ts similarity index 95% rename from packages/core/__tests__/utils.test.ts rename to packages/core/__tests__/common/utils.test.ts index 87a2858..de84099 100644 --- a/packages/core/__tests__/utils.test.ts +++ b/packages/core/__tests__/common/utils.test.ts @@ -1,8 +1,10 @@ -import { getExtendedCodeFrame, regExpTest } from '/utils' +import { getExtendedCodeFrame, regExpTest } from '../../src/utils' import dedent from 'dedent' -import { createWildcardUtils } from '/wildcardUtilsFactory' +import { createWildcardUtils } from '../../src/wildcardUtilsFactory' +import { PoorNodeType } from '../../src/types' describe('Utils', () => { + const getIdentifierNodeName = (node: PoorNodeType) => node.name as string const identifierTypes: string[] = [] // not needed for this test const numericWildcard = '0x0' const wildcardChar = '$' @@ -10,6 +12,7 @@ describe('Utils', () => { identifierTypes, numericWildcard, wildcardChar, + getIdentifierNodeName, ) describe('should transform strings to regexes', () => { diff --git a/packages/core/__tests__/search/other.test.ts b/packages/core/__tests__/search/other.test.ts deleted file mode 100644 index 94df540..0000000 --- a/packages/core/__tests__/search/other.test.ts +++ /dev/null @@ -1,176 +0,0 @@ -import path from 'path' -import { useTraverseApproachTestOnly } from '../../src/config' -import { searchInStrings } from '../../src/searchInStrings' -import { getFilesList } from '/getFilesList' -import { searchInFileSystem } from '/searchInFs' - -describe('Other', () => { - let filesList = [] as string[] - - beforeAll(async () => { - filesList = await getFilesList({ - searchRoot: path.resolve(__dirname, '__fixtures__'), - omitGitIgnore: true, - }) - }) - - it('should not include the same result twice', () => { - const queries = [ - ` - type $$ = ScrollViewProps & $$$ - `, - ` - type $$ = $$$ & ScrollViewProps - `, - ] - - const { matches, errors } = searchInFileSystem({ - mode: 'include', - filePaths: filesList, - queryCodes: queries, - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - }) - - it('should not include the same result twice 2', () => { - const queries = [ - ` - <$$$ - $$={() => {}} - /> - `, - ` - <$$$ - $$={() => $$$} - /> - `, - ` - <$$$ - $$={() => {}} - > - - `, - ` - <$$$ - $$={() => $$$} - > - - `, - ] - - const { matches, errors } = searchInFileSystem({ - mode: 'include', - filePaths: filesList, - queryCodes: queries, - }) - - expect(errors).toHaveLength(0) - expect(matches.length).toBe(190) - }) - - it('should match anything', () => { - const queries = [ - ` - $$$ - `, - ] - - const { matches, errors } = searchInFileSystem({ - mode: 'include', - filePaths: filesList, - queryCodes: queries, - }) - - const countForTraversalMode = 6381 // will just match identifier-like nodes - const countForNonTraversalMode = 17149 // will match any node - - const expectedCount = useTraverseApproachTestOnly - ? countForTraversalMode - : countForNonTraversalMode - - expect(errors.length).toBe(0) - expect(matches.length).toBe(expectedCount) - }) - - it('Should properly match identifiers with multiple wildcard sections', () => { - const fileContent = ` - varOne; - var_two; - ` - - const queries = [`$$_$$`] - - const { matches, errors } = searchInStrings({ - mode: 'exact', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - }) - - it('Should match try-catch block with statement and re-throw of error', () => { - const fileContent = ` - try { - await bla.bla.bla - } catch (error) { - logger.error(error); - throw error; - } - ` - - const queries = [`try {} catch($$) { Logger.error($$); throw $$ }`] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - }) - - it('Should match class with static method', () => { - const fileContent = ` - class Test { - method() { return 0 } - static getInstance(){ - return new Test() - } - } - ` - - const queries = [`class $$ {static getInstance(){}}`] - - const { matches, errors } = searchInStrings({ - mode: 'include', - caseInsensitive: true, - queryCodes: queries, - files: [ - { - path: 'mock', - content: fileContent, - }, - ], - }) - - expect(errors.length).toBe(0) - expect(matches.length).toBe(1) - }) -}) diff --git a/packages/core/__tests__/utils.ts b/packages/core/__tests__/utils.ts index e34e0d1..352b274 100644 --- a/packages/core/__tests__/utils.ts +++ b/packages/core/__tests__/utils.ts @@ -1,8 +1,13 @@ -import { compareCode as compareCodeBase } from '/astUtils' -import { ParserType } from '/types' +import { + compareCode as compareCodeBase, + compareAst as compareAstBase, +} from '../src/astUtils' +import { PoorNodeType } from '../src/types' import { parserSettingsMap } from '../src/parserSettings/index' +import path from 'path' +import { testParserTypeOverride } from '../src/testOnlyConfig' -const parserType = process.env.TEST_PARSER_TYPE as ParserType +export const parserType = testParserTypeOverride export const getParserSettings = () => { if (parserType === undefined) { @@ -19,3 +24,31 @@ export const compareCode = (codeA: string, codeB: string) => { return compareCodeBase(codeA, codeB, parserSettings) } + +export const compareAst = (astA: PoorNodeType, astB: PoorNodeType) => { + const parserSettings = getParserSettings() + + return compareAstBase(astA, astB, parserSettings) +} + +export const compareAstToCode = (ast: PoorNodeType, code: string) => { + const parserSettings = getParserSettings() + + const astFromCode = parserSettings.unwrapExpressionStatement( + parserSettings.getProgramBodyFromRootNode( + parserSettings.parseCode(code), + )[0], + ) + + return compareAstBase(ast, astFromCode, parserSettings) +} + +export const fixturesPath = path.resolve( + process.cwd(), + '__tests__/__fixtures__', +) + +export const fixturesOtherPath = path.resolve( + process.cwd(), + '__tests__/__fixturesOther__', +) diff --git a/packages/core/declarations.d.ts b/packages/core/declarations.d.ts new file mode 100644 index 0000000..b8b4571 --- /dev/null +++ b/packages/core/declarations.d.ts @@ -0,0 +1,2 @@ +declare module '@babel/eslint-parser' +declare module 'espree' diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js index 58ef380..23e4704 100644 --- a/packages/core/jest.config.js +++ b/packages/core/jest.config.js @@ -1,25 +1,136 @@ -const { pathsToModuleNameMapper } = require('ts-jest') -const fs = require('fs') +const sharedConfig = { + preset: 'ts-jest', + testEnvironment: 'node', + setupFiles: ['/jest/shared.setup.ts'], +} + +const javaScriptWithJSXParserTestFiles = [ + '/__tests__/JavaScript/**/*.test.ts', + '/__tests__/JavaScriptWithJSX/**/*.test.ts', +] -const tsConfig = JSON.parse( - fs - .readFileSync(__dirname + '/tsconfig.json') - .toString() - .replace(/^(\s)*\/\//gm, '') - .replace(/\/\*.+?\*\//gm, ''), -) +const typeScriptParserTestFiles = [ + '/__tests__/JavaScript/**/*.test.ts', + '/__tests__/JavaScriptWithJSX/**/*.test.ts', + '/__tests__/TypeScript/**/*.test.ts', +] module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - moduleNameMapper: pathsToModuleNameMapper(tsConfig.compilerOptions.paths, { - prefix: '', - }), testPathIgnorePatterns: [ '__fixtures__', '__fixturesOther__', 'ts-dist', 'utils.ts', ], - setupFiles: ['./jest.setup.js'], + projects: [ + { + displayName: { name: 'common', color: 'white' }, + ...sharedConfig, + testMatch: ['/__tests__/common/**/*.test.ts'], + }, + { + displayName: { name: 'text-search', color: 'cyan' }, + ...sharedConfig, + testMatch: ['/__tests__/TextSearch/**/*.test.ts'], + }, + { + ...sharedConfig, + displayName: { name: 'typescript-eslint-parser', color: 'magenta' }, + testMatch: typeScriptParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/typescript-eslint-parser.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { + name: 'typescript-eslint-parser:traversal', + color: 'magenta', + }, + testMatch: typeScriptParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/typescript-eslint-parser:traversal.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { name: 'babel', color: 'yellow' }, + testMatch: typeScriptParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/babel.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { + name: 'babel:traversal', + color: 'yellow', + }, + testMatch: typeScriptParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/babel:traversal.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { name: 'babel-eslint-parser', color: 'yellow' }, + testMatch: javaScriptWithJSXParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/babel-eslint-parser.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { + name: 'babel-eslint-parser:traversal', + color: 'yellow', + }, + testMatch: javaScriptWithJSXParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/babel-eslint-parser:traversal.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { name: 'esprima', color: 'gray' }, + testMatch: javaScriptWithJSXParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/esprima.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { name: 'esprima:traversal', color: 'gray' }, + testMatch: javaScriptWithJSXParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/esprima:traversal.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { name: 'espree', color: 'blue' }, + testMatch: javaScriptWithJSXParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/espree.setup.ts', + ], + }, + { + ...sharedConfig, + displayName: { name: 'espree:traversal', color: 'blue' }, + testMatch: javaScriptWithJSXParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/espree:traversal.setup.ts', + ], + }, + ], } diff --git a/packages/core/jest.setup.js b/packages/core/jest.setup.js deleted file mode 100644 index b1e2bd6..0000000 --- a/packages/core/jest.setup.js +++ /dev/null @@ -1 +0,0 @@ -process.env.NODE_ENV = 'test' diff --git a/packages/core/jest/babel-eslint-parser.setup.ts b/packages/core/jest/babel-eslint-parser.setup.ts new file mode 100644 index 0000000..42e8fa9 --- /dev/null +++ b/packages/core/jest/babel-eslint-parser.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'babel-eslint-parser', + isTraversal: false, +} diff --git a/packages/core/jest/babel-eslint-parser:traversal.setup.ts b/packages/core/jest/babel-eslint-parser:traversal.setup.ts new file mode 100644 index 0000000..2ada1d1 --- /dev/null +++ b/packages/core/jest/babel-eslint-parser:traversal.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'babel-eslint-parser', + isTraversal: true, +} diff --git a/packages/core/jest/babel.setup.ts b/packages/core/jest/babel.setup.ts new file mode 100644 index 0000000..5f7cc46 --- /dev/null +++ b/packages/core/jest/babel.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'babel', + isTraversal: false, +} diff --git a/packages/core/jest/babel:traversal.setup.ts b/packages/core/jest/babel:traversal.setup.ts new file mode 100644 index 0000000..d7cbbef --- /dev/null +++ b/packages/core/jest/babel:traversal.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'babel', + isTraversal: true, +} diff --git a/packages/core/jest/espree.setup.ts b/packages/core/jest/espree.setup.ts new file mode 100644 index 0000000..a773abc --- /dev/null +++ b/packages/core/jest/espree.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'espree', + isTraversal: false, +} diff --git a/packages/core/jest/espree:traversal.setup.ts b/packages/core/jest/espree:traversal.setup.ts new file mode 100644 index 0000000..02d3041 --- /dev/null +++ b/packages/core/jest/espree:traversal.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'espree', + isTraversal: true, +} diff --git a/packages/core/jest/esprima.setup.ts b/packages/core/jest/esprima.setup.ts new file mode 100644 index 0000000..3d0f844 --- /dev/null +++ b/packages/core/jest/esprima.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'esprima', + isTraversal: false, +} diff --git a/packages/core/jest/esprima:traversal.setup.ts b/packages/core/jest/esprima:traversal.setup.ts new file mode 100644 index 0000000..87df7d7 --- /dev/null +++ b/packages/core/jest/esprima:traversal.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'esprima', + isTraversal: true, +} diff --git a/packages/core/jest/shared.setup.ts b/packages/core/jest/shared.setup.ts new file mode 100644 index 0000000..cae8393 --- /dev/null +++ b/packages/core/jest/shared.setup.ts @@ -0,0 +1,12 @@ +process.env.NODE_ENV = 'test' + +global.console = { + ...console, + warn: (...inputs) => { + if (typeof inputs[0] === 'string' && inputs[0].includes('Browserslist')) { + return + } else { + return console.log('console.warn', ...inputs) + } + }, +} diff --git a/packages/core/jest/typescript-eslint-parser.setup.ts b/packages/core/jest/typescript-eslint-parser.setup.ts new file mode 100644 index 0000000..7ca8b6c --- /dev/null +++ b/packages/core/jest/typescript-eslint-parser.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'typescript-eslint-parser', + isTraversal: false, +} diff --git a/packages/core/jest/typescript-eslint-parser:traversal.setup.ts b/packages/core/jest/typescript-eslint-parser:traversal.setup.ts new file mode 100644 index 0000000..62bb4ff --- /dev/null +++ b/packages/core/jest/typescript-eslint-parser:traversal.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'typescript-eslint-parser', + isTraversal: true, +} diff --git a/packages/core/package.json b/packages/core/package.json index fc6b395..ffe8c88 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -26,10 +26,12 @@ "url": "https://github.com/codeque-co/codeque" }, "devDependencies": { + "@babel/eslint-parser": "^7.21.8", + "@babel/generator": "^7.21.4", "@types/dedent": "^0.7.0", "@types/esprima": "^4.0.3", "@types/glob": "^7.2.0", - "@types/jest": "^27.0.3", + "@types/jest": "^29.4.0", "@types/mock-fs": "^4.13.1", "@types/node-fetch": "^3.0.3", "@types/object.omit": "^3.0.0", @@ -40,6 +42,7 @@ "babel-plugin-root-import": "^6.6.0", "concurrently": "^7.2.1", "deep-object-diff": "^1.1.7", + "espree": "^9.5.2", "esprima": "^4.0.1", "jest": "^27.4.4", "mock-fs": "^5.1.2", @@ -70,12 +73,17 @@ "build:declarations": "tsc --project tsconfig.build.json", "build:code": "babel ./src --extensions \".ts,.tsx\" -d dist", "typecheck": "tsc --project tsconfig.json", - "test": "yarn build:test && yarn test:babel && yarn test:typescript-eslint && yarn test:babel:traversal && yarn test:typescript-eslint:traversal", - "test:babel": "TEST_PARSER_TYPE=babel jest", - "test:babel:traversal": "TEST_PARSER_TYPE=babel TEST_TRAVERSAL=true jest", - "test:typescript-eslint": "TEST_PARSER_TYPE=typescript-eslint jest", - "test:typescript-eslint:traversal": "TEST_PARSER_TYPE=typescript-eslint TEST_TRAVERSAL=true jest", - "test:esprima": "TEST_PARSER_TYPE=esprima jest", + "test": "yarn build:test && NODE_OPTIONS=--max-old-space-size=4000 yarn jest --maxWorkers=25%", + "test:babel": "jest --selectProjects=babel", + "test:babel:traversal": "jest --selectProjects=babel:traversal", + "test:babel-eslint-parser": "jest --selectProjects=babel-eslint-parser", + "test:babel-eslint-parser:traversal": "jest --selectProjects=babel-eslint-parser:traversal", + "test:typescript-eslint-parser": "jest --selectProjects=typescript-eslint-parser", + "test:typescript-eslint-parser:traversal": "jest --selectProjects=typescript-eslint-parser:traversal", + "test:esprima": "jest --selectProjects=esprima", + "test:esprima:traversal": "jest --selectProjects=esprima:traversal", + "test:espree": "jest --selectProjects=espree", + "test:espree:traversal": "jest --selectProjects=espree:traversal", "test:circular": "dpdm --exit-code circular:1 --tree=false --warning=false './src/**'", "test:setup": "node ./tools/getFixtures.js", "lint": "eslint --ext .js,.ts src", @@ -112,4 +120,4 @@ "regexp search", "json search" ] -} \ No newline at end of file +} diff --git a/packages/core/src/astUtils.ts b/packages/core/src/astUtils.ts index becb3db..6e422a1 100644 --- a/packages/core/src/astUtils.ts +++ b/packages/core/src/astUtils.ts @@ -1,4 +1,5 @@ -import { PoorNodeType, ParserSettings, WildcardUtils, Match } from './types' +import { MatchContextAliases } from './matchContext' +import { Match, ParserSettings, PoorNodeType, WildcardUtils } from './types' import { isNullOrUndef } from './utils' export const isNodeArray = ( @@ -32,6 +33,7 @@ const isNodeKey = ( key: string, keysToCheck: ParserSettings['astPropsToSkip'], ) => + key.startsWith('__') || keysToCheck.some((keyToCheck) => typeof keyToCheck === 'string' ? key === keyToCheck @@ -110,11 +112,9 @@ export const cleanupAst = ( isNode: ParserSettings['isNode'] shouldCompareNode: ParserSettings['shouldCompareNode'] astPropsToSkip: ParserSettings['astPropsToSkip'] - sanitizeNode: ParserSettings['sanitizeNode'] + getSanitizedNodeValue: ParserSettings['getSanitizedNodeValue'] }, ) => { - parserSettings.sanitizeNode(ast) - const cleanedAst = removeKeysFromNode(ast, parserSettings.astPropsToSkip) Object.keys(cleanedAst).forEach((key) => { @@ -123,40 +123,77 @@ export const cleanupAst = ( cleanedAst[key] as PoorNodeType, parserSettings, ) - } - - if (isNodeArray(cleanedAst[key] as PoorNodeType[], parserSettings.isNode)) { + } else if ( + isNodeArray(cleanedAst[key] as PoorNodeType[], parserSettings.isNode) + ) { cleanedAst[key] = (cleanedAst[key] as PoorNodeType[]) .filter(parserSettings.shouldCompareNode) .map((subAst) => cleanupAst(subAst, parserSettings)) + } else { + cleanedAst[key] = parserSettings.getSanitizedNodeValue( + cleanedAst.type as string, + key, + cleanedAst[key], + ) } }) return cleanedAst } +type CompareCodeParserSettingsSubset = { + isNode: ParserSettings['isNode'] + shouldCompareNode: ParserSettings['shouldCompareNode'] + astPropsToSkip: ParserSettings['astPropsToSkip'] + parseCode: ParserSettings['parseCode'] + getSanitizedNodeValue: ParserSettings['getSanitizedNodeValue'] + getProgramNodeFromRootNode: ParserSettings['getProgramNodeFromRootNode'] +} + export const compareCode = ( codeA: string, codeB: string, - parserSettings: { - isNode: ParserSettings['isNode'] - shouldCompareNode: ParserSettings['shouldCompareNode'] - astPropsToSkip: ParserSettings['astPropsToSkip'] - parseCode: ParserSettings['parseCode'] - sanitizeNode: ParserSettings['sanitizeNode'] - getProgramNodeFromRootNode: ParserSettings['getProgramNodeFromRootNode'] - }, + parserSettingsSubset: CompareCodeParserSettingsSubset, ) => { - const astA = parserSettings.getProgramNodeFromRootNode( - parserSettings.parseCode(codeA), + const astA = parserSettingsSubset.getProgramNodeFromRootNode( + parserSettingsSubset.parseCode(codeA), ) - const astB = parserSettings.getProgramNodeFromRootNode( - parserSettings.parseCode(codeB), + const astB = parserSettingsSubset.getProgramNodeFromRootNode( + parserSettingsSubset.parseCode(codeB), ) - const cleanedA = cleanupAst(astA, parserSettings) - const cleanedB = cleanupAst(astB, parserSettings) + return compareAst(astA, astB, parserSettingsSubset) +} + +const cloneAst = (ast: PoorNodeType) => { + const uniqueObjectLikeValuesCache: unknown[] = [] + + /** + * Skip circular references (like '__parent') + */ + const stringified = JSON.stringify(ast, (_: string, value: unknown) => { + if (typeof value === 'object' && value !== null) { + // Duplicate reference found, discard key + if (uniqueObjectLikeValuesCache.includes(value)) return + + // Store value in our collection + uniqueObjectLikeValuesCache.push(value) + } + + return value + }) + + return JSON.parse(stringified) +} + +export const compareAst = ( + astA: PoorNodeType, + astB: PoorNodeType, + parserSettingsSubset: CompareCodeParserSettingsSubset, +) => { + const cleanedA = cleanupAst(cloneAst(astA), parserSettingsSubset) + const cleanedB = cleanupAst(cloneAst(astB), parserSettingsSubset) return JSON.stringify(cleanedA) === JSON.stringify(cleanedB) } @@ -165,16 +202,25 @@ export const sortByLeastIdentifierStrength = ( nodeA: PoorNodeType, nodeB: PoorNodeType, wildcardUtils: WildcardUtils, + getIdentifierNodeName: (node: PoorNodeType) => string, ) => { - const aWildcard = wildcardUtils.getWildcardFromNode(nodeA) - const bWildcard = wildcardUtils.getWildcardFromNode(nodeB) + const aWildcards = wildcardUtils.getIdentifierWildcardsFromNode(nodeA) + const bWildcards = wildcardUtils.getIdentifierWildcardsFromNode(nodeB) - const aIsIdentifierWithWildcard = aWildcard !== null - const bIsIdentifierWithWildcard = bWildcard !== null + const aIsIdentifierWithWildcards = aWildcards.length > 0 + const bIsIdentifierWithWildcards = bWildcards.length > 0 - if (aIsIdentifierWithWildcard && bIsIdentifierWithWildcard) { - const idA = aWildcard.wildcardWithoutRef - const idB = bWildcard.wildcardWithoutRef + if (aIsIdentifierWithWildcards && bIsIdentifierWithWildcards) { + const idA = wildcardUtils.removeWildcardAliasesFromIdentifierName( + getIdentifierNodeName(nodeA), + ) + const idB = wildcardUtils.removeWildcardAliasesFromIdentifierName( + getIdentifierNodeName(nodeB), + ) + + if (idA === idB) { + return 0 + } if (idA === wildcardUtils.nodesTreeWildcard) { return 1 @@ -196,11 +242,11 @@ export const sortByLeastIdentifierStrength = ( return bNonWildcardCharsLen - aNonWildcardCharsLen } - if (aIsIdentifierWithWildcard) { + if (aIsIdentifierWithWildcards) { return 1 } - if (bIsIdentifierWithWildcard) { + if (bIsIdentifierWithWildcards) { return -1 } @@ -210,10 +256,12 @@ export const sortByLeastIdentifierStrength = ( export const getMatchFromNode = ( node: PoorNodeType, parserSettings: Pick, + aliases: MatchContextAliases, ) => ({ ...parserSettings.getNodePosition(node), node, + aliases, } as Match) export const getVisitorKeysForQueryNodeType = ( diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts deleted file mode 100644 index 150e61b..0000000 --- a/packages/core/src/config.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const useTraverseApproachTestOnly = - process.env['TEST_TRAVERSAL'] === 'true' diff --git a/packages/core/src/getFilesList.ts b/packages/core/src/getFilesList.ts index 4def437..9680fcc 100644 --- a/packages/core/src/getFilesList.ts +++ b/packages/core/src/getFilesList.ts @@ -161,7 +161,7 @@ export const filterExtensions = ( return filesList.filter((filePath) => extensionTester.test(filePath)) } -type GetFilesListArgs = { +export type GetFilesListArgs = { searchRoot: string entryPoint?: string byGitChanges?: boolean diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index f0fa5fd..107df81 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,7 +1,6 @@ export { default as searchInStrings } from './searchInStrings' export { searchMultiThread } from './searchMultiThread' export { searchInFileSystem } from './searchInFs' - export { getMode, groupMatchesByFile } from './utils' export { parseQueries } from './parseQuery' export { @@ -22,6 +21,7 @@ import { getMatchFromNode, getVisitorKeysForQueryNodeType } from './astUtils' import { validateMatch } from './searchStages/validateMatch' import { getLocationOfMultilineMatch } from './searchStages/getLocationOfMultilineMatch' import { traverseAndMatch } from './searchStages/traverseAndMatch' +import { createMatchContext } from './matchContext' export const __internal = { parserSettingsMap, @@ -31,4 +31,5 @@ export const __internal = { getVisitorKeysForQueryNodeType, getLocationOfMultilineMatch, traverseAndMatch, + createMatchContext, } diff --git a/packages/core/src/matchContext.ts b/packages/core/src/matchContext.ts new file mode 100644 index 0000000..cabb2b1 --- /dev/null +++ b/packages/core/src/matchContext.ts @@ -0,0 +1,103 @@ +import { Mode, ParserSettings, PoorNodeType } from './types' + +export type IdentifierWildcardAlias = { + alias: string + aliasValue: string + wildcard: string +} + +export type StringWildcardAlias = { + alias: string + aliasValue: string + wildcard: string +} + +export type NodesTreeWildcardAlias = { + alias: string + aliasNode: PoorNodeType + aliasValue: string + wildcard: string +} + +type IdentifierWildcardAliasesMap = Record< + IdentifierWildcardAlias['alias'], + IdentifierWildcardAlias +> + +type StringWildcardAliasesMap = Record< + StringWildcardAlias['alias'], + StringWildcardAlias +> + +type NodesTreeWildcardAliasesMap = Record< + NodesTreeWildcardAlias['alias'], + NodesTreeWildcardAlias +> + +export type MatchContextAliases = { + identifierAliasesMap: IdentifierWildcardAliasesMap + stringAliasesMap: StringWildcardAliasesMap + nodesTreeAliasesMap: NodesTreeWildcardAliasesMap +} + +export type MatchContext = { + addIdentifierAlias: (ref: IdentifierWildcardAlias) => void + getIdentifierAlias: (alias: string) => IdentifierWildcardAlias | null + addStringAlias: (ref: StringWildcardAlias) => void + getStringAlias: (alias: string) => StringWildcardAlias | null + addNodesTreeAlias: (ref: NodesTreeWildcardAlias) => void + getNodesTreeAlias: (alias: string) => NodesTreeWildcardAlias | null + getAllAliases: () => MatchContextAliases +} + +export const createMatchContext = ( + initialContext?: MatchContextAliases, +): MatchContext => { + const identifierAliasesMap: IdentifierWildcardAliasesMap = initialContext + ? { ...(initialContext.identifierAliasesMap ?? {}) } + : {} + const addIdentifierAlias = (wildcardAlias: IdentifierWildcardAlias) => { + identifierAliasesMap[wildcardAlias.alias] = wildcardAlias + } + + const getIdentifierAlias = (alias: string) => { + return identifierAliasesMap[alias] ?? null + } + + const stringAliasesMap: StringWildcardAliasesMap = initialContext + ? { ...(initialContext.stringAliasesMap ?? {}) } + : {} + const addStringAlias = (wildcardAlias: StringWildcardAlias) => { + stringAliasesMap[wildcardAlias.alias] = wildcardAlias + } + + const getStringAlias = (alias: string) => { + return stringAliasesMap[alias] ?? null + } + + const nodesTreeAliasesMap: NodesTreeWildcardAliasesMap = initialContext + ? { ...(initialContext.nodesTreeAliasesMap ?? {}) } + : {} + + const addNodesTreeAlias = (wildcardAlias: NodesTreeWildcardAlias) => { + nodesTreeAliasesMap[wildcardAlias.alias] = wildcardAlias + } + + const getNodesTreeAlias = (alias: string) => { + return nodesTreeAliasesMap[alias] ?? null + } + + return { + addIdentifierAlias, + getIdentifierAlias, + addStringAlias, + getStringAlias, + addNodesTreeAlias, + getNodesTreeAlias, + getAllAliases: () => ({ + identifierAliasesMap, + stringAliasesMap, + nodesTreeAliasesMap, + }), + } +} diff --git a/packages/core/src/parseQuery.ts b/packages/core/src/parseQuery.ts index 3247712..a3734db 100644 --- a/packages/core/src/parseQuery.ts +++ b/packages/core/src/parseQuery.ts @@ -28,7 +28,7 @@ export const getUniqueTokens = ( if (parserSettings.isIdentifierNode(queryNode)) { const trimmedWildcards = parserSettings.wildcardUtils - .removeIdentifierRefFromWildcard(queryNode.name as string) + .removeWildcardAliasesFromIdentifierName(queryNode.name as string) .split(parserSettings.wildcardUtils.identifierWildcard) trimmedWildcards.forEach((part) => { @@ -40,7 +40,9 @@ export const getUniqueTokens = ( if (stringLikeLiteralUtils.isStringLikeLiteralNode(queryNode)) { const stringContent = - stringLikeLiteralUtils.getStringLikeLiteralValue(queryNode) + parserSettings.wildcardUtils.removeWildcardAliasesFromStringLiteral( + stringLikeLiteralUtils.getStringLikeLiteralValue(queryNode), + ) const trimmedWildcards = decomposeString( stringContent, diff --git a/packages/core/src/parserSettings/_common/JSFamilyCommon.ts b/packages/core/src/parserSettings/_common/JSFamilyCommon.ts index 5a7bedd..261fa2d 100644 --- a/packages/core/src/parserSettings/_common/JSFamilyCommon.ts +++ b/packages/core/src/parserSettings/_common/JSFamilyCommon.ts @@ -1,3 +1,4 @@ +import type { ParserOptions, ParserPlugin } from '@babel/parser' export const numericWildcard = '0x0' export const wildcardChar = '$' @@ -10,3 +11,29 @@ export const supportedExtensions = [ 'mjs', 'json', ] + +export const babelPluginsWithoutJSX = [ + 'typescript', + 'decorators-legacy', + 'importAssertions', + 'doExpressions', +] as ParserPlugin[] + +export const babelPluginsWithJSX = [ + ...babelPluginsWithoutJSX, + 'jsx', +] as ParserPlugin[] + +export const babelParseOptionsWithJSX = { + sourceType: 'module', + plugins: babelPluginsWithJSX, + allowReturnOutsideFunction: true, + allowImportExportEverywhere: true, +} as ParserOptions + +export const babelParseOptionsWithoutJSX = { + sourceType: 'module', + plugins: babelPluginsWithoutJSX, + allowReturnOutsideFunction: true, + allowImportExportEverywhere: true, +} as ParserOptions diff --git a/packages/core/src/parserSettings/babelEslintParser/afterWildcardsComparators.ts b/packages/core/src/parserSettings/babelEslintParser/afterWildcardsComparators.ts new file mode 100644 index 0000000..57ef1a0 --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/afterWildcardsComparators.ts @@ -0,0 +1,23 @@ +import { NodesComparator } from '../../types' +import { wildcardForAnyImport } from './nodeComparators/wildcardForAnyImport' +import { matchJsxElementRegardlessClosingTagNodesComparator } from './nodeComparators/matchJsxElementRegardlessClosingTag' +import { matchJsxIdentifierUsingIdentifierNodesComparator } from './nodeComparators/matchJsxIdentifierUsingIdentifier' +import { partialMatchTemplateLiteralNodesComparator } from './nodeComparators/partialMatchTemplateLiteral' +import { matchOptionalFlagInMemberExpressionNodesComparator } from './nodeComparators/matchOptionalFlagInMemberExpression' +import { matchDestructPropBeforeRenameNodesComparator } from './nodeComparators/matchDestructPropBeforeRename' +import { wildcardForAnyTypeAnnotation } from './nodeComparators/wildcardForAnyTypeAnnotation' +import { wildcardForAnyTypeParameter } from './nodeComparators/wildcardForAnyTypeParameter' +import { matchObjectPropertiesOfDifferentTypesNodesComparator } from './nodeComparators/matchObjectPropertiesOfDifferentTypes' + +// Better keep this order +export const afterWildcardsComparators: NodesComparator[] = [ + wildcardForAnyImport, + wildcardForAnyTypeAnnotation, + wildcardForAnyTypeParameter, + matchDestructPropBeforeRenameNodesComparator, + matchObjectPropertiesOfDifferentTypesNodesComparator, + matchJsxElementRegardlessClosingTagNodesComparator, + matchJsxIdentifierUsingIdentifierNodesComparator, + partialMatchTemplateLiteralNodesComparator, + matchOptionalFlagInMemberExpressionNodesComparator, +] diff --git a/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts new file mode 100644 index 0000000..7c6c68d --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts @@ -0,0 +1,8 @@ +import { NodesComparator } from '../../types' +import { wildcardForTypeKeywordsNodesComparator } from './nodeComparators/wildcardForTypeKeywords' +import { wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator } from './nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues' + +export const beforeWildcardsComparators: NodesComparator[] = [ + wildcardForTypeKeywordsNodesComparator, + wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator, +] diff --git a/packages/core/src/parserSettings/babelEslintParser/common.ts b/packages/core/src/parserSettings/babelEslintParser/common.ts new file mode 100644 index 0000000..69f5db5 --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/common.ts @@ -0,0 +1,23 @@ +import { numericWildcard, wildcardChar } from '../_common/JSFamilyCommon' +import { createWildcardUtils } from '../../wildcardUtilsFactory' +import { PoorNodeType } from '../../types' + +export const identifierNodeTypes = [ + 'Identifier', + 'JSXIdentifier', + 'TSTypeParameter', +] + +export const getIdentifierNodeName = (node: PoorNodeType) => node.name as string +export const setIdentifierNodeName = (node: PoorNodeType, name: string) => { + node.name = name +} + +export const getNodeType = (node: PoorNodeType) => node.type as string + +export const wildcardUtils = createWildcardUtils( + identifierNodeTypes, + numericWildcard, + wildcardChar, + getIdentifierNodeName, +) diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchDestructPropBeforeRename.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchDestructPropBeforeRename.ts new file mode 100644 index 0000000..1d522cf --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchDestructPropBeforeRename.ts @@ -0,0 +1,6 @@ +import { createMatchDestructPropBeforeRenameNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchDestructPropBeforeRename' + +export const matchDestructPropBeforeRenameNodesComparator = + createMatchDestructPropBeforeRenameNodesComparator({ + objectPropertyNodeName: 'Property', + }) diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts new file mode 100644 index 0000000..a60143b --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts @@ -0,0 +1,4 @@ +import { createMatchJsxElementRegardlessClosingTagNodesComparator } from '../../nodeComparatorFactories/JsxSpecific/matchJsxElementRegardlessClosingTag' + +export const matchJsxElementRegardlessClosingTagNodesComparator = + createMatchJsxElementRegardlessClosingTagNodesComparator() diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts new file mode 100644 index 0000000..7a21bf7 --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts @@ -0,0 +1,4 @@ +import { createMatchJsxIdentifierUsingIdentifierNodesComparator } from '../../nodeComparatorFactories/JsxSpecific/matchJsxIdentifierUsingIdentifier' + +export const matchJsxIdentifierUsingIdentifierNodesComparator = + createMatchJsxIdentifierUsingIdentifierNodesComparator() diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts new file mode 100644 index 0000000..99bdf9b --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts @@ -0,0 +1,6 @@ +import { createMatchObjectPropertiesOfDifferentTypesNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchObjectPropertiesOfDifferentTypes' + +export const matchObjectPropertiesOfDifferentTypesNodesComparator = + createMatchObjectPropertiesOfDifferentTypesNodesComparator({ + objectPropertyNodeName: 'Property', + }) diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchOptionalFlagInMemberExpression.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchOptionalFlagInMemberExpression.ts new file mode 100644 index 0000000..2287657 --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/matchOptionalFlagInMemberExpression.ts @@ -0,0 +1,4 @@ +import { createMatchOptionalFlagInMemberExpressionNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchOptionalFlagInMemberExpression' + +export const matchOptionalFlagInMemberExpressionNodesComparator = + createMatchOptionalFlagInMemberExpressionNodesComparator() diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/partialMatchTemplateLiteral.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/partialMatchTemplateLiteral.ts new file mode 100644 index 0000000..3579c69 --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/partialMatchTemplateLiteral.ts @@ -0,0 +1,4 @@ +import { createPartialMatchTemplateLiteralNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/partialMatchTemplateLiteral' + +export const partialMatchTemplateLiteralNodesComparator = + createPartialMatchTemplateLiteralNodesComparator() diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyImport.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyImport.ts new file mode 100644 index 0000000..103a66d --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyImport.ts @@ -0,0 +1,6 @@ +import { createWildcardForAnyImportNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/wildcardForAnyImport' +import { wildcardUtils } from '../common' + +export const wildcardForAnyImport = createWildcardForAnyImportNodesComparator({ + wildcardUtils, +}) diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyTypeAnnotation.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyTypeAnnotation.ts new file mode 100644 index 0000000..832977b --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyTypeAnnotation.ts @@ -0,0 +1,7 @@ +import { createWildcardForAnyTypeAnnotationNodesComparator } from '../../nodeComparatorFactories/TypeScriptSpecific/wildcardForAnyTypeAnnotation' +import { wildcardUtils } from '../common' + +export const wildcardForAnyTypeAnnotation = + createWildcardForAnyTypeAnnotationNodesComparator({ + wildcardUtils, + }) diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyTypeParameter.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyTypeParameter.ts new file mode 100644 index 0000000..1ed2a24 --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAnyTypeParameter.ts @@ -0,0 +1,25 @@ +import { PoorNodeType, NodesComparator } from '../../../types' +import { wildcardUtils } from '../common' +export const wildcardForAnyTypeParameter: NodesComparator = ( + { queryNode }, + _, + { fileKeysToTraverseForOtherMatches, measureCompare }, +) => { + if (queryNode) { + if ( + (queryNode.type as string) === 'TSTypeParameter' && + wildcardUtils.removeWildcardAliasesFromIdentifierName( + (queryNode.name as PoorNodeType).name as string, + ) === wildcardUtils.nodesTreeWildcard + ) { + measureCompare() + + return { + levelMatch: true, + queryKeysToTraverseForValidatingMatch: [], + fileKeysToTraverseForValidatingMatch: [], + fileKeysToTraverseForOtherMatches, + } + } + } +} diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts new file mode 100644 index 0000000..6f1c78c --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts @@ -0,0 +1,4 @@ +import { createWildcardForAssignmentPatternOrDefaultParamValuesNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/wildcardForAssignmentPatternOrDefaultParamValues' + +export const wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator = + createWildcardForAssignmentPatternOrDefaultParamValuesNodesComparator() diff --git a/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForTypeKeywords.ts b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForTypeKeywords.ts new file mode 100644 index 0000000..3b1c143 --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/nodeComparators/wildcardForTypeKeywords.ts @@ -0,0 +1,5 @@ +import { createWildcardForTypeKeywordNodesComparator } from '../../nodeComparatorFactories/TypeScriptSpecific/wildcardForTypeKeywords' +import { wildcardUtils } from '../common' + +export const wildcardForTypeKeywordsNodesComparator = + createWildcardForTypeKeywordNodesComparator({ wildcardUtils }) diff --git a/packages/core/src/parserSettings/babelEslintParser/settings.ts b/packages/core/src/parserSettings/babelEslintParser/settings.ts new file mode 100644 index 0000000..bad4f0a --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/settings.ts @@ -0,0 +1,274 @@ +import { + ParserSettings, + PoorNodeType, + Location, + NodesComparatorParameters, + NumericLiteralUtils, + ProgramNodeAndBlockNodeUtils, + StringLikeLiteralUtils, + MatchPosition, +} from '../../types' +import { parse } from '@babel/eslint-parser' + +import { supportedExtensions } from '../_common/JSFamilyCommon' + +import { + getNodeType, + identifierNodeTypes, + wildcardUtils, + setIdentifierNodeName, + getIdentifierNodeName, +} from './common' + +import { normalizeText, runNodesComparators } from '../../utils' +import { afterWildcardsComparators } from './afterWildcardsComparators' +import { beforeWildcardsComparators } from './beforeWildcardsComparators' + +const parseCode = (code: string, filePath = '') => { + const maybeWrappedJSON = /\.json$/.test(filePath) ? `(${code})` : code + try { + return parse(maybeWrappedJSON, { + filePath, + sourceType: 'module', + requireConfigFile: false, + allowImportExportEverywhere: false, + babelOptions: { + babelrc: false, + /** + * ❗ Note that enabling config file makes babel look for package.json, which will crash in browser runtime + * At some point we might need to enable resolving plugins from users config files, it might be blocking some syntaxes. + * But since @babel/eslint-parser is bit retarded it terms of configuration, it might be an edge case which we will never run into. + */ + configFile: false, + parserOpts: { + plugins: ['jsx'], + }, + }, + }) as unknown as PoorNodeType + } catch (e) { + return parse(maybeWrappedJSON, { + filePath, + sourceType: 'module', + requireConfigFile: false, + allowImportExportEverywhere: false, + babelOptions: { + babelrc: false, + configFile: false, + parserOpts: { + plugins: [], + }, + }, + }) as unknown as PoorNodeType + } +} + +/** + * We mimic @babel/eslint-parser, but we don't use it directly, as it has not documented API + * We need this only for purpose of eslint plugin and to make sure that output AST is searchable + */ +const getProgramNodeFromRootNode = (fileOrProgramNode: PoorNodeType) => + 'program' in fileOrProgramNode + ? (fileOrProgramNode.program as PoorNodeType) + : fileOrProgramNode + +const getProgramBodyFromRootNode = (fileOrProgramNode: PoorNodeType) => { + return getProgramNodeFromRootNode(fileOrProgramNode).body as PoorNodeType[] +} + +const isIdentifierNode = (node: PoorNodeType) => + identifierNodeTypes.includes(getNodeType(node)) + +const alternativeNodeTypes = { + Identifier: identifierNodeTypes, + ChainExpression: ['MemberExpression'], + MemberExpression: ['ChainExpression'], + BlockStatement: ['Program'], +} + +const unwrapExpressionStatement = (node: PoorNodeType) => { + if (typeof node !== 'object') { + return node + } + + if (node.type === 'ExpressionStatement') { + return node.expression as PoorNodeType + } + + return node as PoorNodeType +} + +const createBlockStatementNode = ( + body: PoorNodeType[], + position: MatchPosition, +) => + ({ + type: 'BlockStatement', + body, + loc: position.loc, + range: [position.start, position.end], + } as unknown as PoorNodeType) + +const isNode = (maybeNode: PoorNodeType) => { + return typeof maybeNode?.type === 'string' +} + +const isNodeFieldOptional = (nodeType: string, nodeFieldKey: string) => { + // Eslint-typescript is about to remove optionality of properties https://github.com/typescript-eslint/typescript-eslint/pull/6274 + return true +} + +const astPropsToSkip = [ + 'loc', + 'range', + 'raw', + 'trailingComments', + 'leadingComments', + 'comments', + 'tail', // Support for partial matching of template literals + 'parent', // in eslint there is parent prop in node + { type: 'ArrowFunctionExpression', key: 'expression' }, // flag on ArrowFunctionExpression + 'tokens', + 'start', + 'end', + 'extra', +] + +const sanitizeTemplateElementValue = ({ + raw, + cooked, +}: { + raw: string + cooked: string +}) => { + return { + raw: normalizeText(raw), + cooked: normalizeText(cooked), + } +} + +type NodeValueSanitizers = Record any>> + +const nodeValuesSanitizers: NodeValueSanitizers = { + ['JSXText']: { + value: normalizeText, + raw: normalizeText, + }, + ['TemplateElement']: { + value: sanitizeTemplateElementValue, + }, +} + +const getSanitizedNodeValue = ( + nodeType: string, + valueKey: string, + value: unknown, +) => { + const valueSanitizer = nodeValuesSanitizers?.[nodeType]?.[valueKey] + + if (valueSanitizer) { + return valueSanitizer(value) + } + + return value +} + +const shouldCompareNode = (node: PoorNodeType) => { + if (node.type === 'JSXText') { + const value: string = getSanitizedNodeValue('JSXText', 'value', node.value) + + return value.length > 0 + } + + return true +} + +const compareNodesBeforeWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(beforeWildcardsComparators, nodeComparatorParams) +} + +const compareNodesAfterWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(afterWildcardsComparators, nodeComparatorParams) +} + +const isFirstCharStringStart = (str: string) => + str.charAt(0) === `'` || str.charAt(0) === `"` + +const stringLikeLiteralUtils: StringLikeLiteralUtils = { + isStringLikeLiteralNode: (node: PoorNodeType) => + (node.type === 'Literal' && isFirstCharStringStart(node.raw as string)) || + node.type === 'TemplateElement' || + node.type === 'JSXText', + getStringLikeLiteralValue: (node: PoorNodeType) => { + if (node.type === 'TemplateElement') { + const { raw } = sanitizeTemplateElementValue( + node.value as { raw: string; cooked: string }, + ) + + return raw + } + + // (node.type === 'Literal' || node.type === 'JSXText' + return normalizeText(node.value as string) + }, +} + +const numericLiteralUtils: NumericLiteralUtils = { + isNumericLiteralNode: (node: PoorNodeType) => + node.type === 'Literal' && !isFirstCharStringStart(node.raw as string), + getNumericLiteralValue: (node: PoorNodeType) => node.raw as string, +} + +const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { + isProgramNode: (node: PoorNodeType) => node.type === 'Program', + isBlockNode: (node: PoorNodeType) => node.type === 'BlockStatement', + programNodeBodyKey: 'body', + blockNodeBodyKey: 'body', +} + +const getNodePosition: ParserSettings['getNodePosition'] = ( + node: PoorNodeType, +) => ({ + start: (node.range as any)[0] as number, + end: (node.range as any)[1] as number, + loc: node.loc as unknown as Location, +}) + +const getParseErrorLocation = (e: any) => ({ + line: e.lineNumber ?? 0, + column: e.column ?? 0, +}) + +export const babelEslintParserSettings: ParserSettings = { + parseCode, + getProgramNodeFromRootNode, + getProgramBodyFromRootNode, + isIdentifierNode, + getNodeType, + wildcardUtils, + setIdentifierNodeName, + alternativeNodeTypes, + astPropsToSkip, + supportedExtensions, + isNode, + identifierNodeTypes, + isNodeFieldOptional, + getIdentifierNodeName, + unwrapExpressionStatement, + createBlockStatementNode, + getSanitizedNodeValue, + shouldCompareNode, + compareNodesBeforeWildcardsComparison, + compareNodesAfterWildcardsComparison, + identifierTypeAnnotationFieldName: 'typeAnnotation', + stringLikeLiteralUtils, + numericLiteralUtils, + programNodeAndBlockNodeUtils, + getNodePosition, + getParseErrorLocation, +} + +export default babelEslintParserSettings diff --git a/packages/core/src/parserSettings/babelParser/common.ts b/packages/core/src/parserSettings/babelParser/common.ts index b2a7418..69f5db5 100644 --- a/packages/core/src/parserSettings/babelParser/common.ts +++ b/packages/core/src/parserSettings/babelParser/common.ts @@ -1,5 +1,6 @@ import { numericWildcard, wildcardChar } from '../_common/JSFamilyCommon' import { createWildcardUtils } from '../../wildcardUtilsFactory' +import { PoorNodeType } from '../../types' export const identifierNodeTypes = [ 'Identifier', @@ -7,8 +8,16 @@ export const identifierNodeTypes = [ 'TSTypeParameter', ] +export const getIdentifierNodeName = (node: PoorNodeType) => node.name as string +export const setIdentifierNodeName = (node: PoorNodeType, name: string) => { + node.name = name +} + +export const getNodeType = (node: PoorNodeType) => node.type as string + export const wildcardUtils = createWildcardUtils( identifierNodeTypes, numericWildcard, wildcardChar, + getIdentifierNodeName, ) diff --git a/packages/core/src/parserSettings/babelParser/settings.ts b/packages/core/src/parserSettings/babelParser/settings.ts index 332ec09..b596029 100644 --- a/packages/core/src/parserSettings/babelParser/settings.ts +++ b/packages/core/src/parserSettings/babelParser/settings.ts @@ -8,14 +8,24 @@ import { NumericLiteralUtils, ProgramNodeAndBlockNodeUtils, Location, - Match, + MatchPosition, } from '../../types' + import { normalizeText, runNodesComparators } from '../../utils' import { beforeWildcardsComparators } from './beforeWildcardsComparators' import { afterWildcardsComparators } from './afterWildcardsComparators' -import { supportedExtensions } from '../_common/JSFamilyCommon' -import {} from '../../wildcardUtilsFactory' -import { identifierNodeTypes, wildcardUtils } from './common' +import { + supportedExtensions, + babelParseOptionsWithJSX, + babelParseOptionsWithoutJSX, +} from '../_common/JSFamilyCommon' +import { + getIdentifierNodeName, + getNodeType, + identifierNodeTypes, + wildcardUtils, + setIdentifierNodeName, +} from './common' const getProgramNodeFromRootNode = (fileNode: PoorNodeType) => fileNode.program as PoorNodeType @@ -38,7 +48,7 @@ const unwrapExpressionStatement = (node: PoorNodeType) => { const createBlockStatementNode = ( body: PoorNodeType[], - position: Omit, + position: MatchPosition, ) => ({ type: 'BlockStatement', body, @@ -71,70 +81,77 @@ const astPropsToSkip = [ ] const parseCode = (code: string, filePath = '') => { - const pluginsWithoutJSX = [ - 'typescript', - 'decorators-legacy', - 'importAssertions', - 'doExpressions', - ] as ParserPlugin[] - const pluginsWithJSX = [...pluginsWithoutJSX, 'jsx'] as ParserPlugin[] - - const parseOptionsWithJSX = { - sourceType: 'module', - plugins: pluginsWithJSX, - allowReturnOutsideFunction: true, - } as ParserOptions - - const parseOptionsWithoutJSX = { - sourceType: 'module', - plugins: pluginsWithoutJSX, - allowReturnOutsideFunction: true, - } as ParserOptions - const maybeWrappedJSON = /\.json$/.test(filePath) ? `(${code})` : code - try { return parse( maybeWrappedJSON, - parseOptionsWithJSX, + babelParseOptionsWithJSX, ) as unknown as PoorNodeType } catch (e) { return parse( maybeWrappedJSON, - parseOptionsWithoutJSX, + babelParseOptionsWithoutJSX, ) as unknown as PoorNodeType } } -const sanitizeJSXText = (node: PoorNodeType) => { - //@ts-ignore - node.value = normalizeText(node.value) - //@ts-ignore - node.extra.raw = normalizeText(node.extra.raw) - //@ts-ignore - node.extra.rawValue = normalizeText(node.extra.rawValue) +const sanitizeJSXTextExtraValue = ({ + raw, + rawValue, +}: { + raw: string + rawValue: string +}) => { + return { + raw: normalizeText(raw), + rawValue: normalizeText(rawValue), + } } -const sanitizeTemplateElement = (node: PoorNodeType) => { - //@ts-ignore - node.value.raw = normalizeText(node.value.raw) - //@ts-ignore - node.value.cooked = normalizeText(node.value.cooked) +const sanitizeTemplateElementValue = ({ + raw, + cooked, +}: { + raw: string + cooked: string +}) => { + return { + raw: normalizeText(raw), + cooked: normalizeText(cooked), + } } -const sanitizeNode = (node: PoorNodeType) => { - if (node?.type === 'TemplateElement') { - sanitizeTemplateElement(node) - } else if (node?.type === 'JSXText') { - sanitizeJSXText(node) +type NodeValueSanitizers = Record any>> + +const nodeValuesSanitizers: NodeValueSanitizers = { + ['JSXText']: { + value: normalizeText, + extra: sanitizeJSXTextExtraValue, + }, + ['TemplateElement']: { + value: sanitizeTemplateElementValue, + }, +} + +const getSanitizedNodeValue = ( + nodeType: string, + valueKey: string, + value: unknown, +) => { + const valueSanitizer = nodeValuesSanitizers?.[nodeType]?.[valueKey] + + if (valueSanitizer) { + return valueSanitizer(value) } + + return value } const shouldCompareNode = (node: PoorNodeType) => { if (node.type === 'JSXText') { - sanitizeJSXText(node) + const value: string = getSanitizedNodeValue('JSXText', 'value', node.value) - return (node.value as string).length > 0 + return value.length > 0 } return true @@ -152,9 +169,6 @@ const compareNodesAfterWildcardsComparison = ( return runNodesComparators(afterWildcardsComparators, nodeComparatorParams) } -const getIdentifierNodeName = (node: PoorNodeType) => node.name as string -const getNodeType = (node: PoorNodeType) => node.type as string - const isIdentifierNode = (node: PoorNodeType) => identifierNodeTypes.includes(getNodeType(node)) @@ -164,7 +178,16 @@ const stringLikeLiteralUtils: StringLikeLiteralUtils = { node.type === 'TemplateElement' || node.type === 'JSXText', getStringLikeLiteralValue: (node: PoorNodeType) => { - return ((node.value as any)?.raw as string) ?? (node?.value as string) + if (node.type === 'TemplateElement') { + const { raw } = sanitizeTemplateElementValue( + node.value as { raw: string; cooked: string }, + ) + + return raw + } + + // (node.type === 'StringLiteral' || node.type === 'JSXText' + return normalizeText(node.value as string) }, } @@ -183,7 +206,7 @@ const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { const getNodePosition: ParserSettings['getNodePosition'] = ( node: PoorNodeType, -) => ({ +): MatchPosition => ({ start: node.start as number, end: node.end as number, loc: node.loc as unknown as Location, @@ -206,15 +229,17 @@ export const babelParserSettings: ParserSettings = { parseCode, isNode, isIdentifierNode, + identifierNodeTypes, astPropsToSkip, isNodeFieldOptional, getProgramBodyFromRootNode, getProgramNodeFromRootNode, getIdentifierNodeName, + setIdentifierNodeName, getNodeType, unwrapExpressionStatement, createBlockStatementNode, - sanitizeNode, + getSanitizedNodeValue, shouldCompareNode, wildcardUtils, compareNodesBeforeWildcardsComparison, diff --git a/packages/core/src/parserSettings/espreeParser/afterWildcardsComparators.ts b/packages/core/src/parserSettings/espreeParser/afterWildcardsComparators.ts new file mode 100644 index 0000000..cdee906 --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/afterWildcardsComparators.ts @@ -0,0 +1,19 @@ +import { NodesComparator } from '../../types' +import { wildcardForAnyImport } from './nodeComparators/wildcardForAnyImport' +import { matchJsxElementRegardlessClosingTagNodesComparator } from './nodeComparators/matchJsxElementRegardlessClosingTag' +import { matchJsxIdentifierUsingIdentifierNodesComparator } from './nodeComparators/matchJsxIdentifierUsingIdentifier' +import { partialMatchTemplateLiteralNodesComparator } from './nodeComparators/partialMatchTemplateLiteral' +import { matchOptionalFlagInMemberExpressionNodesComparator } from './nodeComparators/matchOptionalFlagInMemberExpression' +import { matchDestructPropBeforeRenameNodesComparator } from './nodeComparators/matchDestructPropBeforeRename' +import { matchObjectPropertiesOfDifferentTypesNodesComparator } from './nodeComparators/matchObjectPropertiesOfDifferentTypes' + +// Better keep this order +export const afterWildcardsComparators: NodesComparator[] = [ + wildcardForAnyImport, + matchDestructPropBeforeRenameNodesComparator, + matchObjectPropertiesOfDifferentTypesNodesComparator, + matchJsxElementRegardlessClosingTagNodesComparator, + matchJsxIdentifierUsingIdentifierNodesComparator, + partialMatchTemplateLiteralNodesComparator, + matchOptionalFlagInMemberExpressionNodesComparator, +] diff --git a/packages/core/src/parserSettings/espreeParser/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/espreeParser/beforeWildcardsComparators.ts new file mode 100644 index 0000000..6203233 --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/beforeWildcardsComparators.ts @@ -0,0 +1,6 @@ +import { NodesComparator } from '../../types' +import { wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator } from './nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues' + +export const beforeWildcardsComparators: NodesComparator[] = [ + wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator, +] diff --git a/packages/core/src/parserSettings/espreeParser/common.ts b/packages/core/src/parserSettings/espreeParser/common.ts new file mode 100644 index 0000000..48e4cb9 --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/common.ts @@ -0,0 +1,17 @@ +import { numericWildcard, wildcardChar } from '../_common/JSFamilyCommon' +import { createWildcardUtils } from '../../wildcardUtilsFactory' +import { PoorNodeType } from '../../types' +export const identifierNodeTypes = ['Identifier', 'JSXIdentifier'] +export const getIdentifierNodeName = (node: PoorNodeType) => node.name as string +export const setIdentifierNodeName = (node: PoorNodeType, name: string) => { + node.name = name +} + +export const getNodeType = (node: PoorNodeType) => node.type as string + +export const wildcardUtils = createWildcardUtils( + identifierNodeTypes, + numericWildcard, + wildcardChar, + getIdentifierNodeName, +) diff --git a/packages/core/src/parserSettings/espreeParser/nodeComparators/matchDestructPropBeforeRename.ts b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchDestructPropBeforeRename.ts new file mode 100644 index 0000000..1d522cf --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchDestructPropBeforeRename.ts @@ -0,0 +1,6 @@ +import { createMatchDestructPropBeforeRenameNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchDestructPropBeforeRename' + +export const matchDestructPropBeforeRenameNodesComparator = + createMatchDestructPropBeforeRenameNodesComparator({ + objectPropertyNodeName: 'Property', + }) diff --git a/packages/core/src/parserSettings/espreeParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts new file mode 100644 index 0000000..a60143b --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts @@ -0,0 +1,4 @@ +import { createMatchJsxElementRegardlessClosingTagNodesComparator } from '../../nodeComparatorFactories/JsxSpecific/matchJsxElementRegardlessClosingTag' + +export const matchJsxElementRegardlessClosingTagNodesComparator = + createMatchJsxElementRegardlessClosingTagNodesComparator() diff --git a/packages/core/src/parserSettings/espreeParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts new file mode 100644 index 0000000..7a21bf7 --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts @@ -0,0 +1,4 @@ +import { createMatchJsxIdentifierUsingIdentifierNodesComparator } from '../../nodeComparatorFactories/JsxSpecific/matchJsxIdentifierUsingIdentifier' + +export const matchJsxIdentifierUsingIdentifierNodesComparator = + createMatchJsxIdentifierUsingIdentifierNodesComparator() diff --git a/packages/core/src/parserSettings/espreeParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts new file mode 100644 index 0000000..99bdf9b --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts @@ -0,0 +1,6 @@ +import { createMatchObjectPropertiesOfDifferentTypesNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchObjectPropertiesOfDifferentTypes' + +export const matchObjectPropertiesOfDifferentTypesNodesComparator = + createMatchObjectPropertiesOfDifferentTypesNodesComparator({ + objectPropertyNodeName: 'Property', + }) diff --git a/packages/core/src/parserSettings/espreeParser/nodeComparators/matchOptionalFlagInMemberExpression.ts b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchOptionalFlagInMemberExpression.ts new file mode 100644 index 0000000..2287657 --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/nodeComparators/matchOptionalFlagInMemberExpression.ts @@ -0,0 +1,4 @@ +import { createMatchOptionalFlagInMemberExpressionNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchOptionalFlagInMemberExpression' + +export const matchOptionalFlagInMemberExpressionNodesComparator = + createMatchOptionalFlagInMemberExpressionNodesComparator() diff --git a/packages/core/src/parserSettings/espreeParser/nodeComparators/partialMatchTemplateLiteral.ts b/packages/core/src/parserSettings/espreeParser/nodeComparators/partialMatchTemplateLiteral.ts new file mode 100644 index 0000000..3579c69 --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/nodeComparators/partialMatchTemplateLiteral.ts @@ -0,0 +1,4 @@ +import { createPartialMatchTemplateLiteralNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/partialMatchTemplateLiteral' + +export const partialMatchTemplateLiteralNodesComparator = + createPartialMatchTemplateLiteralNodesComparator() diff --git a/packages/core/src/parserSettings/espreeParser/nodeComparators/wildcardForAnyImport.ts b/packages/core/src/parserSettings/espreeParser/nodeComparators/wildcardForAnyImport.ts new file mode 100644 index 0000000..103a66d --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/nodeComparators/wildcardForAnyImport.ts @@ -0,0 +1,6 @@ +import { createWildcardForAnyImportNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/wildcardForAnyImport' +import { wildcardUtils } from '../common' + +export const wildcardForAnyImport = createWildcardForAnyImportNodesComparator({ + wildcardUtils, +}) diff --git a/packages/core/src/parserSettings/espreeParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts b/packages/core/src/parserSettings/espreeParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts new file mode 100644 index 0000000..6f1c78c --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts @@ -0,0 +1,4 @@ +import { createWildcardForAssignmentPatternOrDefaultParamValuesNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/wildcardForAssignmentPatternOrDefaultParamValues' + +export const wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator = + createWildcardForAssignmentPatternOrDefaultParamValuesNodesComparator() diff --git a/packages/core/src/parserSettings/espreeParser/settings.ts b/packages/core/src/parserSettings/espreeParser/settings.ts new file mode 100644 index 0000000..582f80f --- /dev/null +++ b/packages/core/src/parserSettings/espreeParser/settings.ts @@ -0,0 +1,246 @@ +import { parse } from 'espree' + +import { + Location, + NodesComparatorParameters, + NumericLiteralUtils, + ParserSettings, + PoorNodeType, + ProgramNodeAndBlockNodeUtils, + StringLikeLiteralUtils, + MatchPosition, +} from '../../types' +import { normalizeText, runNodesComparators } from '../../utils' +import { supportedExtensions } from '../_common/JSFamilyCommon' +import { afterWildcardsComparators } from './afterWildcardsComparators' +import { beforeWildcardsComparators } from './beforeWildcardsComparators' +import { + getIdentifierNodeName, + getNodeType, + identifierNodeTypes, + wildcardUtils, + setIdentifierNodeName, +} from './common' + +const getProgramNodeFromRootNode = (rootNode: PoorNodeType) => rootNode // root node is program node + +const getProgramBodyFromRootNode = (rootNode: PoorNodeType) => { + return getProgramNodeFromRootNode(rootNode).body as PoorNodeType[] +} + +const unwrapExpressionStatement = (node: PoorNodeType) => { + if (typeof node !== 'object') { + return node + } + + if (node.type === 'ExpressionStatement') { + return node.expression as PoorNodeType + } + + return node as PoorNodeType +} + +const createBlockStatementNode = ( + body: PoorNodeType[], + position: MatchPosition, +) => + ({ + type: 'BlockStatement', + body, + loc: position.loc, + range: [position.start, position.end], + } as unknown as PoorNodeType) + +const isNode = (maybeNode: PoorNodeType) => { + return typeof maybeNode?.type === 'string' +} + +const isNodeFieldOptional = (nodeType: string, nodeFieldKey: string) => { + // Eslint-typescript is about to remove optionality of properties https://github.com/typescript-eslint/typescript-eslint/pull/6274 + return true +} + +const astPropsToSkip = [ + 'start', + 'end', + 'loc', + 'range', + 'raw', + 'trailingComments', + 'leadingComments', + 'comments', + 'tail', // Support for partial matching of template literals + 'parent', // in eslint there is parent prop in node + { type: 'ArrowFunctionExpression', key: 'expression' }, // flag on ArrowFunctionExpression +] + +const parseCode = (code: string, filePath = '') => { + const options = { + range: true, + loc: true, + comment: false, + tokens: false, + ecmaVersion: 'latest', + sourceType: 'module', + ecmaFeatures: { + jsx: true, + globalReturn: true, + impliedStrict: false, + }, + } + + const maybeWrappedJSON = /\.json$/.test(filePath) ? `(${code})` : code + + const ast = parse(maybeWrappedJSON, options) + + return ast as unknown as PoorNodeType +} + +const sanitizeTemplateElementValue = ({ + raw, + cooked, +}: { + raw: string + cooked: string +}) => { + return { + raw: normalizeText(raw), + cooked: normalizeText(cooked), + } +} + +type NodeValueSanitizers = Record any>> + +const nodeValuesSanitizers: NodeValueSanitizers = { + ['JSXText']: { + value: normalizeText, + raw: normalizeText, + }, + ['TemplateElement']: { + value: sanitizeTemplateElementValue, + }, +} + +const getSanitizedNodeValue = ( + nodeType: string, + valueKey: string, + value: unknown, +) => { + const valueSanitizer = nodeValuesSanitizers?.[nodeType]?.[valueKey] + + if (valueSanitizer) { + return valueSanitizer(value) + } + + return value +} + +const shouldCompareNode = (node: PoorNodeType) => { + if (node.type === 'JSXText') { + const value: string = getSanitizedNodeValue('JSXText', 'value', node.value) + + return value.length > 0 + } + + return true +} + +const compareNodesBeforeWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(beforeWildcardsComparators, nodeComparatorParams) +} + +const compareNodesAfterWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(afterWildcardsComparators, nodeComparatorParams) +} + +const isIdentifierNode = (node: PoorNodeType) => + identifierNodeTypes.includes(getNodeType(node)) + +const isFirstCharStringStart = (str: string) => + str.charAt(0) === `'` || str.charAt(0) === `"` + +const stringLikeLiteralUtils: StringLikeLiteralUtils = { + isStringLikeLiteralNode: (node: PoorNodeType) => + (node.type === 'Literal' && isFirstCharStringStart(node.raw as string)) || + node.type === 'TemplateElement' || + node.type === 'JSXText', + getStringLikeLiteralValue: (node: PoorNodeType) => { + if (node.type === 'TemplateElement') { + const { raw } = sanitizeTemplateElementValue( + node.value as { raw: string; cooked: string }, + ) + + return raw + } + + // (node.type === 'Literal' || node.type === 'JSXText' + return normalizeText(node.value as string) + }, +} + +const numericLiteralUtils: NumericLiteralUtils = { + isNumericLiteralNode: (node: PoorNodeType) => + node.type === 'Literal' && !isFirstCharStringStart(node.raw as string), + getNumericLiteralValue: (node: PoorNodeType) => node.raw as string, +} + +const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { + isProgramNode: (node: PoorNodeType) => node.type === 'Program', + isBlockNode: (node: PoorNodeType) => node.type === 'BlockStatement', + programNodeBodyKey: 'body', + blockNodeBodyKey: 'body', +} + +const getNodePosition: ParserSettings['getNodePosition'] = ( + node: PoorNodeType, +) => ({ + start: (node.range as any)[0] as number, + end: (node.range as any)[1] as number, + loc: node.loc as unknown as Location, +}) + +const getParseErrorLocation = (e: any) => ({ + line: e.lineNumber ?? 0, + column: e.column ?? 0, +}) + +const alternativeNodeTypes = { + Identifier: identifierNodeTypes, + ChainExpression: ['MemberExpression'], + MemberExpression: ['ChainExpression'], + BlockStatement: ['Program'], +} +export const espreeParserSettings: ParserSettings = { + supportedExtensions, + parseCode, + isNode, + isIdentifierNode, + identifierNodeTypes, + astPropsToSkip, + isNodeFieldOptional, + getProgramBodyFromRootNode, + getProgramNodeFromRootNode, + getIdentifierNodeName, + setIdentifierNodeName, + getNodeType, + unwrapExpressionStatement, + createBlockStatementNode, + getSanitizedNodeValue, + shouldCompareNode, + wildcardUtils, + compareNodesBeforeWildcardsComparison, + compareNodesAfterWildcardsComparison, + identifierTypeAnnotationFieldName: 'typeAnnotation', + stringLikeLiteralUtils, + numericLiteralUtils, + programNodeAndBlockNodeUtils, + getNodePosition, + getParseErrorLocation, + alternativeNodeTypes, +} + +export default espreeParserSettings diff --git a/packages/core/src/parserSettings/esprimaParser/afterWildcardsComparators.ts b/packages/core/src/parserSettings/esprimaParser/afterWildcardsComparators.ts new file mode 100644 index 0000000..cdee906 --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/afterWildcardsComparators.ts @@ -0,0 +1,19 @@ +import { NodesComparator } from '../../types' +import { wildcardForAnyImport } from './nodeComparators/wildcardForAnyImport' +import { matchJsxElementRegardlessClosingTagNodesComparator } from './nodeComparators/matchJsxElementRegardlessClosingTag' +import { matchJsxIdentifierUsingIdentifierNodesComparator } from './nodeComparators/matchJsxIdentifierUsingIdentifier' +import { partialMatchTemplateLiteralNodesComparator } from './nodeComparators/partialMatchTemplateLiteral' +import { matchOptionalFlagInMemberExpressionNodesComparator } from './nodeComparators/matchOptionalFlagInMemberExpression' +import { matchDestructPropBeforeRenameNodesComparator } from './nodeComparators/matchDestructPropBeforeRename' +import { matchObjectPropertiesOfDifferentTypesNodesComparator } from './nodeComparators/matchObjectPropertiesOfDifferentTypes' + +// Better keep this order +export const afterWildcardsComparators: NodesComparator[] = [ + wildcardForAnyImport, + matchDestructPropBeforeRenameNodesComparator, + matchObjectPropertiesOfDifferentTypesNodesComparator, + matchJsxElementRegardlessClosingTagNodesComparator, + matchJsxIdentifierUsingIdentifierNodesComparator, + partialMatchTemplateLiteralNodesComparator, + matchOptionalFlagInMemberExpressionNodesComparator, +] diff --git a/packages/core/src/parserSettings/esprimaParser/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/esprimaParser/beforeWildcardsComparators.ts new file mode 100644 index 0000000..6203233 --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/beforeWildcardsComparators.ts @@ -0,0 +1,6 @@ +import { NodesComparator } from '../../types' +import { wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator } from './nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues' + +export const beforeWildcardsComparators: NodesComparator[] = [ + wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator, +] diff --git a/packages/core/src/parserSettings/esprimaParser/common.ts b/packages/core/src/parserSettings/esprimaParser/common.ts new file mode 100644 index 0000000..48e4cb9 --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/common.ts @@ -0,0 +1,17 @@ +import { numericWildcard, wildcardChar } from '../_common/JSFamilyCommon' +import { createWildcardUtils } from '../../wildcardUtilsFactory' +import { PoorNodeType } from '../../types' +export const identifierNodeTypes = ['Identifier', 'JSXIdentifier'] +export const getIdentifierNodeName = (node: PoorNodeType) => node.name as string +export const setIdentifierNodeName = (node: PoorNodeType, name: string) => { + node.name = name +} + +export const getNodeType = (node: PoorNodeType) => node.type as string + +export const wildcardUtils = createWildcardUtils( + identifierNodeTypes, + numericWildcard, + wildcardChar, + getIdentifierNodeName, +) diff --git a/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchDestructPropBeforeRename.ts b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchDestructPropBeforeRename.ts new file mode 100644 index 0000000..1d522cf --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchDestructPropBeforeRename.ts @@ -0,0 +1,6 @@ +import { createMatchDestructPropBeforeRenameNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchDestructPropBeforeRename' + +export const matchDestructPropBeforeRenameNodesComparator = + createMatchDestructPropBeforeRenameNodesComparator({ + objectPropertyNodeName: 'Property', + }) diff --git a/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts new file mode 100644 index 0000000..a60143b --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchJsxElementRegardlessClosingTag.ts @@ -0,0 +1,4 @@ +import { createMatchJsxElementRegardlessClosingTagNodesComparator } from '../../nodeComparatorFactories/JsxSpecific/matchJsxElementRegardlessClosingTag' + +export const matchJsxElementRegardlessClosingTagNodesComparator = + createMatchJsxElementRegardlessClosingTagNodesComparator() diff --git a/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts new file mode 100644 index 0000000..7a21bf7 --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchJsxIdentifierUsingIdentifier.ts @@ -0,0 +1,4 @@ +import { createMatchJsxIdentifierUsingIdentifierNodesComparator } from '../../nodeComparatorFactories/JsxSpecific/matchJsxIdentifierUsingIdentifier' + +export const matchJsxIdentifierUsingIdentifierNodesComparator = + createMatchJsxIdentifierUsingIdentifierNodesComparator() diff --git a/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts new file mode 100644 index 0000000..99bdf9b --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchObjectPropertiesOfDifferentTypes.ts @@ -0,0 +1,6 @@ +import { createMatchObjectPropertiesOfDifferentTypesNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchObjectPropertiesOfDifferentTypes' + +export const matchObjectPropertiesOfDifferentTypesNodesComparator = + createMatchObjectPropertiesOfDifferentTypesNodesComparator({ + objectPropertyNodeName: 'Property', + }) diff --git a/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchOptionalFlagInMemberExpression.ts b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchOptionalFlagInMemberExpression.ts new file mode 100644 index 0000000..2287657 --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/nodeComparators/matchOptionalFlagInMemberExpression.ts @@ -0,0 +1,4 @@ +import { createMatchOptionalFlagInMemberExpressionNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/matchOptionalFlagInMemberExpression' + +export const matchOptionalFlagInMemberExpressionNodesComparator = + createMatchOptionalFlagInMemberExpressionNodesComparator() diff --git a/packages/core/src/parserSettings/esprimaParser/nodeComparators/partialMatchTemplateLiteral.ts b/packages/core/src/parserSettings/esprimaParser/nodeComparators/partialMatchTemplateLiteral.ts new file mode 100644 index 0000000..3579c69 --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/nodeComparators/partialMatchTemplateLiteral.ts @@ -0,0 +1,4 @@ +import { createPartialMatchTemplateLiteralNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/partialMatchTemplateLiteral' + +export const partialMatchTemplateLiteralNodesComparator = + createPartialMatchTemplateLiteralNodesComparator() diff --git a/packages/core/src/parserSettings/esprimaParser/nodeComparators/wildcardForAnyImport.ts b/packages/core/src/parserSettings/esprimaParser/nodeComparators/wildcardForAnyImport.ts new file mode 100644 index 0000000..103a66d --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/nodeComparators/wildcardForAnyImport.ts @@ -0,0 +1,6 @@ +import { createWildcardForAnyImportNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/wildcardForAnyImport' +import { wildcardUtils } from '../common' + +export const wildcardForAnyImport = createWildcardForAnyImportNodesComparator({ + wildcardUtils, +}) diff --git a/packages/core/src/parserSettings/esprimaParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts b/packages/core/src/parserSettings/esprimaParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts new file mode 100644 index 0000000..6f1c78c --- /dev/null +++ b/packages/core/src/parserSettings/esprimaParser/nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues.ts @@ -0,0 +1,4 @@ +import { createWildcardForAssignmentPatternOrDefaultParamValuesNodesComparator } from '../../nodeComparatorFactories/JavaScriptSpecific/wildcardForAssignmentPatternOrDefaultParamValues' + +export const wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator = + createWildcardForAssignmentPatternOrDefaultParamValuesNodesComparator() diff --git a/packages/core/src/parserSettings/esprimaParser/settings.ts b/packages/core/src/parserSettings/esprimaParser/settings.ts index b610495..6973fc4 100644 --- a/packages/core/src/parserSettings/esprimaParser/settings.ts +++ b/packages/core/src/parserSettings/esprimaParser/settings.ts @@ -1,21 +1,236 @@ -import { typescriptEslintParserSettings } from '../typescriptEslintParser/settings' -import { ParserSettings, PoorNodeType } from '../../types' import esprima, { parseModule } from 'esprima' -export const esprimaParserSettings: ParserSettings = { - ...typescriptEslintParserSettings, - parseCode: (code, filePath = '') => { - const settings: esprima.ParseOptions = { - jsx: true, - range: true, - loc: true, - } - const maybeWrappedJSON = /\.json$/.test(filePath) ? `(${code})` : code +import { + Location, + NodesComparatorParameters, + NumericLiteralUtils, + ParserSettings, + PoorNodeType, + ProgramNodeAndBlockNodeUtils, + StringLikeLiteralUtils, + MatchPosition, +} from '../../types' +import { normalizeText, runNodesComparators } from '../../utils' +import { supportedExtensions } from '../_common/JSFamilyCommon' +import { afterWildcardsComparators } from './afterWildcardsComparators' +import { beforeWildcardsComparators } from './beforeWildcardsComparators' +import { + getIdentifierNodeName, + getNodeType, + identifierNodeTypes, + wildcardUtils, + setIdentifierNodeName, +} from './common' + +const getProgramNodeFromRootNode = (rootNode: PoorNodeType) => rootNode // root node is program node + +const getProgramBodyFromRootNode = (rootNode: PoorNodeType) => { + return getProgramNodeFromRootNode(rootNode).body as PoorNodeType[] +} + +const unwrapExpressionStatement = (node: PoorNodeType) => { + if (typeof node !== 'object') { + return node + } + + if (node.type === 'ExpressionStatement') { + return node.expression as PoorNodeType + } + + return node as PoorNodeType +} + +const createBlockStatementNode = ( + body: PoorNodeType[], + position: MatchPosition, +) => + ({ + type: 'BlockStatement', + body, + loc: position.loc, + range: [position.start, position.end], + } as unknown as PoorNodeType) + +const isNode = (maybeNode: PoorNodeType) => { + return typeof maybeNode?.type === 'string' +} + +const isNodeFieldOptional = (nodeType: string, nodeFieldKey: string) => { + // Eslint-typescript is about to remove optionality of properties https://github.com/typescript-eslint/typescript-eslint/pull/6274 + return true +} - const ast = parseModule(maybeWrappedJSON, settings) +const astPropsToSkip = [ + 'loc', + 'range', + 'raw', + 'trailingComments', + 'leadingComments', + 'comments', + 'tail', // Support for partial matching of template literals + 'parent', // in eslint there is parent prop in node + { type: 'ArrowFunctionExpression', key: 'expression' }, // flag on ArrowFunctionExpression +] - return ast as unknown as PoorNodeType +const parseCode = (code: string, filePath = '') => { + const settings: esprima.ParseOptions = { + jsx: true, + range: true, + loc: true, + } + const maybeWrappedJSON = /\.json$/.test(filePath) ? `(${code})` : code + + const ast = parseModule(maybeWrappedJSON, settings) + + return ast as unknown as PoorNodeType +} + +const sanitizeTemplateElementValue = ({ + raw, + cooked, +}: { + raw: string + cooked: string +}) => { + return { + raw: normalizeText(raw), + cooked: normalizeText(cooked), + } +} + +type NodeValueSanitizers = Record any>> + +const nodeValuesSanitizers: NodeValueSanitizers = { + ['JSXText']: { + value: normalizeText, + raw: normalizeText, }, + ['TemplateElement']: { + value: sanitizeTemplateElementValue, + }, +} + +const getSanitizedNodeValue = ( + nodeType: string, + valueKey: string, + value: unknown, +) => { + const valueSanitizer = nodeValuesSanitizers?.[nodeType]?.[valueKey] + + if (valueSanitizer) { + return valueSanitizer(value) + } + + return value +} + +const shouldCompareNode = (node: PoorNodeType) => { + if (node.type === 'JSXText') { + const value: string = getSanitizedNodeValue('JSXText', 'value', node.value) + + return value.length > 0 + } + + return true +} + +const compareNodesBeforeWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(beforeWildcardsComparators, nodeComparatorParams) +} + +const compareNodesAfterWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(afterWildcardsComparators, nodeComparatorParams) +} + +const isIdentifierNode = (node: PoorNodeType) => + identifierNodeTypes.includes(getNodeType(node)) + +const isFirstCharStringStart = (str: string) => + str.charAt(0) === `'` || str.charAt(0) === `"` + +const stringLikeLiteralUtils: StringLikeLiteralUtils = { + isStringLikeLiteralNode: (node: PoorNodeType) => + (node.type === 'Literal' && isFirstCharStringStart(node.raw as string)) || + node.type === 'TemplateElement' || + node.type === 'JSXText', + getStringLikeLiteralValue: (node: PoorNodeType) => { + if (node.type === 'TemplateElement') { + const { raw } = sanitizeTemplateElementValue( + node.value as { raw: string; cooked: string }, + ) + + return raw + } + + // (node.type === 'Literal' || node.type === 'JSXText' + return normalizeText(node.value as string) + }, +} + +const numericLiteralUtils: NumericLiteralUtils = { + isNumericLiteralNode: (node: PoorNodeType) => + node.type === 'Literal' && !isFirstCharStringStart(node.raw as string), + getNumericLiteralValue: (node: PoorNodeType) => node.raw as string, +} + +const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { + isProgramNode: (node: PoorNodeType) => node.type === 'Program', + isBlockNode: (node: PoorNodeType) => node.type === 'BlockStatement', + programNodeBodyKey: 'body', + blockNodeBodyKey: 'body', +} + +const getNodePosition: ParserSettings['getNodePosition'] = ( + node: PoorNodeType, +) => ({ + start: (node.range as any)[0] as number, + end: (node.range as any)[1] as number, + loc: node.loc as unknown as Location, +}) + +const getParseErrorLocation = (e: any) => ({ + line: e.lineNumber ?? 0, + column: e.column ?? 0, +}) + +const alternativeNodeTypes = { + Identifier: identifierNodeTypes, + ChainExpression: ['MemberExpression'], + MemberExpression: ['ChainExpression'], + BlockStatement: ['Program'], +} + +export const esprimaParserSettings: ParserSettings = { + supportedExtensions, + parseCode, + isNode, + isIdentifierNode, + identifierNodeTypes, + astPropsToSkip, + isNodeFieldOptional, + getProgramBodyFromRootNode, + getProgramNodeFromRootNode, + getIdentifierNodeName, + setIdentifierNodeName, + getNodeType, + unwrapExpressionStatement, + createBlockStatementNode, + getSanitizedNodeValue, + shouldCompareNode, + wildcardUtils, + compareNodesBeforeWildcardsComparison, + compareNodesAfterWildcardsComparison, + identifierTypeAnnotationFieldName: 'typeAnnotation', + stringLikeLiteralUtils, + numericLiteralUtils, + programNodeAndBlockNodeUtils, + getNodePosition, + getParseErrorLocation, + alternativeNodeTypes, } export default esprimaParserSettings diff --git a/packages/core/src/parserSettings/index.ts b/packages/core/src/parserSettings/index.ts index d07c2ef..36d6acc 100644 --- a/packages/core/src/parserSettings/index.ts +++ b/packages/core/src/parserSettings/index.ts @@ -6,6 +6,8 @@ const resolveParserSettings = (parser: string) => () => { export const parserSettingsMap: Record ParserSettings> = { babel: resolveParserSettings('babelParser'), - 'typescript-eslint': resolveParserSettings('typescriptEslintParser'), + 'typescript-eslint-parser': resolveParserSettings('typescriptEslintParser'), + espree: resolveParserSettings('espreeParser'), esprima: resolveParserSettings('esprimaParser'), + 'babel-eslint-parser': resolveParserSettings('babelEslintParser'), } diff --git a/packages/core/src/parserSettings/nodeComparatorFactories/JavaScriptSpecific/matchOptionalFlagInMemberExpression.ts b/packages/core/src/parserSettings/nodeComparatorFactories/JavaScriptSpecific/matchOptionalFlagInMemberExpression.ts index 29e4a5f..189a8b6 100644 --- a/packages/core/src/parserSettings/nodeComparatorFactories/JavaScriptSpecific/matchOptionalFlagInMemberExpression.ts +++ b/packages/core/src/parserSettings/nodeComparatorFactories/JavaScriptSpecific/matchOptionalFlagInMemberExpression.ts @@ -16,7 +16,7 @@ import { NodesComparator, PoorNodeType } from '../../../types' export const createMatchOptionalFlagInMemberExpressionNodesComparator = (): NodesComparator => ( - { queryNode, fileNode, searchSettings }, + { queryNode, fileNode, searchSettings, matchContext }, compareNodes, { fileKeysToTraverseForOtherMatches, queryKeysMapper, fileKeysMapper }, ) => { @@ -56,6 +56,7 @@ export const createMatchOptionalFlagInMemberExpressionNodesComparator = searchSettings, queryKeysPrefix: queryKeysMapper(''), fileKeysPrefix: fileKeysMapper('expression'), + matchContext, }) } else if ( queryNode.type === 'ChainExpression' && @@ -67,6 +68,7 @@ export const createMatchOptionalFlagInMemberExpressionNodesComparator = searchSettings, queryKeysPrefix: queryKeysMapper('expression'), fileKeysPrefix: fileKeysMapper(''), + matchContext, }) } } diff --git a/packages/core/src/parserSettings/nodeComparatorFactories/JavaScriptSpecific/wildcardForAssignmentPatternOrDefaultParamValues.ts b/packages/core/src/parserSettings/nodeComparatorFactories/JavaScriptSpecific/wildcardForAssignmentPatternOrDefaultParamValues.ts index 901e038..fafc2b0 100644 --- a/packages/core/src/parserSettings/nodeComparatorFactories/JavaScriptSpecific/wildcardForAssignmentPatternOrDefaultParamValues.ts +++ b/packages/core/src/parserSettings/nodeComparatorFactories/JavaScriptSpecific/wildcardForAssignmentPatternOrDefaultParamValues.ts @@ -13,7 +13,7 @@ export const createWildcardForAssignmentPatternOrDefaultParamValuesNodesComparat (): NodesComparator => ( - { fileNode, queryNode, searchSettings }, + { fileNode, queryNode, searchSettings, matchContext }, compareNodes, { queryKeysMapper, fileKeysMapper }, ) => { @@ -36,6 +36,7 @@ export const createWildcardForAssignmentPatternOrDefaultParamValuesNodesComparat searchSettings, queryKeysPrefix: queryKeysMapper(''), fileKeysPrefix: fileKeysMapper('left'), + matchContext, }) } } diff --git a/packages/core/src/parserSettings/nodeComparatorFactories/JsxSpecific/matchJsxElementRegardlessClosingTag.ts b/packages/core/src/parserSettings/nodeComparatorFactories/JsxSpecific/matchJsxElementRegardlessClosingTag.ts index 6feba32..282ac9b 100644 --- a/packages/core/src/parserSettings/nodeComparatorFactories/JsxSpecific/matchJsxElementRegardlessClosingTag.ts +++ b/packages/core/src/parserSettings/nodeComparatorFactories/JsxSpecific/matchJsxElementRegardlessClosingTag.ts @@ -27,6 +27,8 @@ export const createMatchJsxElementRegardlessClosingTagNodesComparator = (queryNode.children as []).length === 0 ) { measureCompare() + + // To skip matching closing element const keysToTraverse = ['openingElement'] return { diff --git a/packages/core/src/parserSettings/nodeComparatorFactories/TypeScriptSpecific/wildcardForAnyTypeAnnotation.ts b/packages/core/src/parserSettings/nodeComparatorFactories/TypeScriptSpecific/wildcardForAnyTypeAnnotation.ts index 672d7dd..27d30e8 100644 --- a/packages/core/src/parserSettings/nodeComparatorFactories/TypeScriptSpecific/wildcardForAnyTypeAnnotation.ts +++ b/packages/core/src/parserSettings/nodeComparatorFactories/TypeScriptSpecific/wildcardForAnyTypeAnnotation.ts @@ -11,7 +11,7 @@ export const createWildcardForAnyTypeAnnotationNodesComparator = if (queryNode) { if ( (queryNode.type as string) === 'TSTypeReference' && - wildcardUtils.removeIdentifierRefFromWildcard( + wildcardUtils.removeWildcardAliasesFromIdentifierName( (queryNode.typeName as PoorNodeType).name as string, ) === wildcardUtils.nodesTreeWildcard ) { diff --git a/packages/core/src/parserSettings/typescriptEslintParser/common.ts b/packages/core/src/parserSettings/typescriptEslintParser/common.ts index de4f612..48e4cb9 100644 --- a/packages/core/src/parserSettings/typescriptEslintParser/common.ts +++ b/packages/core/src/parserSettings/typescriptEslintParser/common.ts @@ -1,9 +1,17 @@ import { numericWildcard, wildcardChar } from '../_common/JSFamilyCommon' import { createWildcardUtils } from '../../wildcardUtilsFactory' +import { PoorNodeType } from '../../types' export const identifierNodeTypes = ['Identifier', 'JSXIdentifier'] +export const getIdentifierNodeName = (node: PoorNodeType) => node.name as string +export const setIdentifierNodeName = (node: PoorNodeType, name: string) => { + node.name = name +} + +export const getNodeType = (node: PoorNodeType) => node.type as string export const wildcardUtils = createWildcardUtils( identifierNodeTypes, numericWildcard, wildcardChar, + getIdentifierNodeName, ) diff --git a/packages/core/src/parserSettings/typescriptEslintParser/nodeComparators/wildcardForAnyTypeParameter.ts b/packages/core/src/parserSettings/typescriptEslintParser/nodeComparators/wildcardForAnyTypeParameter.ts index 53e82ef..1ed2a24 100644 --- a/packages/core/src/parserSettings/typescriptEslintParser/nodeComparators/wildcardForAnyTypeParameter.ts +++ b/packages/core/src/parserSettings/typescriptEslintParser/nodeComparators/wildcardForAnyTypeParameter.ts @@ -8,7 +8,7 @@ export const wildcardForAnyTypeParameter: NodesComparator = ( if (queryNode) { if ( (queryNode.type as string) === 'TSTypeParameter' && - wildcardUtils.removeIdentifierRefFromWildcard( + wildcardUtils.removeWildcardAliasesFromIdentifierName( (queryNode.name as PoorNodeType).name as string, ) === wildcardUtils.nodesTreeWildcard ) { diff --git a/packages/core/src/parserSettings/typescriptEslintParser/settings.ts b/packages/core/src/parserSettings/typescriptEslintParser/settings.ts index 2e637c5..83bb835 100644 --- a/packages/core/src/parserSettings/typescriptEslintParser/settings.ts +++ b/packages/core/src/parserSettings/typescriptEslintParser/settings.ts @@ -1,19 +1,25 @@ import { parse, ParserOptions } from '@typescript-eslint/parser' import { Location, - Match, NodesComparatorParameters, NumericLiteralUtils, ParserSettings, PoorNodeType, ProgramNodeAndBlockNodeUtils, StringLikeLiteralUtils, + MatchPosition, } from '../../types' import { normalizeText, runNodesComparators } from '../../utils' import { supportedExtensions } from '../_common/JSFamilyCommon' import { afterWildcardsComparators } from './afterWildcardsComparators' import { beforeWildcardsComparators } from './beforeWildcardsComparators' -import { identifierNodeTypes, wildcardUtils } from './common' +import { + getIdentifierNodeName, + getNodeType, + identifierNodeTypes, + wildcardUtils, + setIdentifierNodeName, +} from './common' const getProgramNodeFromRootNode = (rootNode: PoorNodeType) => rootNode // root node is program node @@ -35,7 +41,7 @@ const unwrapExpressionStatement = (node: PoorNodeType) => { const createBlockStatementNode = ( body: PoorNodeType[], - position: Omit, + position: MatchPosition, ) => ({ type: 'BlockStatement', @@ -83,37 +89,50 @@ const parseCode = (code: string, filePath = '') => { return parse(maybeWrappedJSON, parseOptions) as unknown as PoorNodeType } -const generateCode = (node: PoorNodeType, options?: unknown) => { - return 'Not supported' +const sanitizeTemplateElementValue = ({ + raw, + cooked, +}: { + raw: string + cooked: string +}) => { + return { + raw: normalizeText(raw), + cooked: normalizeText(cooked), + } } -const sanitizeJSXText = (node: PoorNodeType) => { - //@ts-ignore - node.value = normalizeText(node.value) - //@ts-ignore - node.raw = normalizeText(node.raw) -} +type NodeValueSanitizers = Record any>> -const sanitizeTemplateElement = (node: PoorNodeType) => { - //@ts-ignore - node.value.raw = normalizeText(node.value.raw) - //@ts-ignore - node.value.cooked = normalizeText(node.value.cooked) +const nodeValuesSanitizers: NodeValueSanitizers = { + ['JSXText']: { + value: normalizeText, + raw: normalizeText, + }, + ['TemplateElement']: { + value: sanitizeTemplateElementValue, + }, } -const sanitizeNode = (node: PoorNodeType) => { - if (node?.type === 'TemplateElement') { - sanitizeTemplateElement(node) - } else if (node?.type === 'JSXText') { - sanitizeJSXText(node) +const getSanitizedNodeValue = ( + nodeType: string, + valueKey: string, + value: unknown, +) => { + const valueSanitizer = nodeValuesSanitizers?.[nodeType]?.[valueKey] + + if (valueSanitizer) { + return valueSanitizer(value) } + + return value } const shouldCompareNode = (node: PoorNodeType) => { if (node.type === 'JSXText') { - sanitizeJSXText(node) + const value: string = getSanitizedNodeValue('JSXText', 'value', node.value) - return (node.value as string).length > 0 + return value.length > 0 } return true @@ -131,9 +150,6 @@ const compareNodesAfterWildcardsComparison = ( return runNodesComparators(afterWildcardsComparators, nodeComparatorParams) } -const getIdentifierNodeName = (node: PoorNodeType) => node.name as string -const getNodeType = (node: PoorNodeType) => node.type as string - const isIdentifierNode = (node: PoorNodeType) => identifierNodeTypes.includes(getNodeType(node)) @@ -146,7 +162,16 @@ const stringLikeLiteralUtils: StringLikeLiteralUtils = { node.type === 'TemplateElement' || node.type === 'JSXText', getStringLikeLiteralValue: (node: PoorNodeType) => { - return ((node.value as any)?.raw as string) ?? (node?.value as string) + if (node.type === 'TemplateElement') { + const { raw } = sanitizeTemplateElementValue( + node.value as { raw: string; cooked: string }, + ) + + return raw + } + + // (node.type === 'Literal' || node.type === 'JSXText' + return normalizeText(node.value as string) }, } @@ -188,15 +213,17 @@ export const typescriptEslintParserSettings: ParserSettings = { parseCode, isNode, isIdentifierNode, + identifierNodeTypes, astPropsToSkip, isNodeFieldOptional, getProgramBodyFromRootNode, getProgramNodeFromRootNode, getIdentifierNodeName, + setIdentifierNodeName, getNodeType, unwrapExpressionStatement, createBlockStatementNode, - sanitizeNode, + getSanitizedNodeValue, shouldCompareNode, wildcardUtils, compareNodesBeforeWildcardsComparison, diff --git a/packages/core/src/searchInFs.ts b/packages/core/src/searchInFs.ts index d80348c..a1aede8 100644 --- a/packages/core/src/searchInFs.ts +++ b/packages/core/src/searchInFs.ts @@ -9,12 +9,10 @@ import { SearchResults, NotNullParsedQuery, SearchSettings, - ParserType, } from './types' import { textSearch } from './textSearch' import { parserSettingsMap } from './parserSettings/index' - -const testParserTypeOverride = process?.env?.TEST_PARSER_TYPE as ParserType +import { testParserTypeOverride } from './testOnlyConfig' export const searchInFileSystem = ({ mode, @@ -37,7 +35,7 @@ export const searchInFileSystem = ({ getFileContent, filePaths, mode, - queryCodes, + queryCodes: queryCodes ?? [], caseInsensitive, onPartialResult, maxResultsLimit, @@ -65,6 +63,8 @@ export const searchInFileSystem = ({ ) if (!parseOk) { + log('Parse query failed') + return { matches: [], hints: queries.map(({ hints }) => hints), @@ -101,7 +101,7 @@ export const searchInFileSystem = ({ fileContent, ...settings, }) - const dedupedFileMatches = dedupMatches(fileMatches, log, debug) + const dedupedFileMatches = dedupMatches(fileMatches) if (onPartialResult && dedupedFileMatches.length > 0) { onPartialResult(dedupedFileMatches) @@ -130,7 +130,9 @@ export const searchInFileSystem = ({ } } - logMetrics() + if (debug) { + logMetrics() + } return { matches: allMatches, diff --git a/packages/core/src/searchInStrings.ts b/packages/core/src/searchInStrings.ts index 007c59f..b9371ca 100644 --- a/packages/core/src/searchInStrings.ts +++ b/packages/core/src/searchInStrings.ts @@ -9,11 +9,9 @@ import { SearchResults, NotNullParsedQuery, SearchSettings, - ParserType, } from './types' import { parserSettingsMap } from './parserSettings/index' - -const testParserTypeOverride = process?.env?.TEST_PARSER_TYPE as ParserType +import { testParserTypeOverride } from './testOnlyConfig' type StringsSearchArgs = Omit & { files: { @@ -66,6 +64,8 @@ export const searchInStrings = ({ ) if (!parseOk) { + log('Parse query failed') + return { matches: [], errors: queries.filter((queryResult) => queryResult.error), @@ -112,7 +112,7 @@ export const searchInStrings = ({ } return { - matches: dedupMatches(allMatches, log, debug), + matches: dedupMatches(allMatches), errors: searchErrors, hints: queries.map(({ hints }) => hints), } diff --git a/packages/core/src/searchMultiThread.ts b/packages/core/src/searchMultiThread.ts index 2f3103b..90be525 100644 --- a/packages/core/src/searchMultiThread.ts +++ b/packages/core/src/searchMultiThread.ts @@ -147,7 +147,9 @@ export const searchMultiThread = async ({ }, ) - logMetrics() + if (params.debug) { + logMetrics() + } return mergedResults } diff --git a/packages/core/src/searchStages/compareNodes.ts b/packages/core/src/searchStages/compareNodes.ts index 574107c..01edcd9 100644 --- a/packages/core/src/searchStages/compareNodes.ts +++ b/packages/core/src/searchStages/compareNodes.ts @@ -1,4 +1,5 @@ import { + compareAst, getKeysWithNodes, getSetsOfKeysToCompare, isNodeArray, @@ -7,12 +8,163 @@ import { PoorNodeType, CompareNodesParams, CompareNodesReturnType, + WildcardUtils, + ParserSettings, + WildcardMeta, } from '../types' import { measureStart, regExpTest } from '../utils' +import { MatchContext } from '../matchContext' const keyWithPrefix = (prefix: string) => (key: string) => prefix ? `${prefix}.${key}` : key +const matchStringOrIdentifierAliases = ({ + queryValue, + fileValue, + matchContext, + wildcardsMeta, + wildcardUtils, + caseInsensitive, +}: { + queryValue: string + fileValue: string + wildcardsMeta: WildcardMeta[] + matchContext: MatchContext + wildcardUtils: WildcardUtils + caseInsensitive: boolean +}): boolean => { + const { patternToRegExp, removeWildcardAliasesFromIdentifierName } = + wildcardUtils + + const identifierNameWithWildcardsWithoutAliases = + removeWildcardAliasesFromIdentifierName(queryValue) + const regex = patternToRegExp( + identifierNameWithWildcardsWithoutAliases, + caseInsensitive, + ) + /** + * Check initial match of wildcards pattern + */ + + const wildcardMatch = regExpTest(regex, fileValue) + + let levelMatch = wildcardMatch + + if (wildcardMatch && wildcardsMeta.length > 0) { + /** + * If there are aliased wildcards, look for aliased values and match or assign new values + */ + const queryNodeIdentifierNameWithWildcard = queryValue + + const fileNodeIdentifierName = fileValue + + /** + * Creates named capturing group for alias, where alias is group name + */ + const createAliasedIdentifierWildcardRegExp = (alias: string) => + `(?<${alias}>(\\w|-)*)` + + const createAliasedStringWildcardRegExp = (alias: string) => + `(?<${alias}>(.)*)` + + const identifierWildcardRegExp = '(\\w|-)*' + const stringWildcardRegExp = '(.)*' + + /** + * Compose regex that represents identifier name with aliased and non aliased wildcards + */ + let wildcardValuesExtractionRegexText = queryNodeIdentifierNameWithWildcard + + wildcardsMeta.forEach( + ({ wildcardAlias, wildcardWithAlias, wildcardType }) => { + let regExpPart = identifierWildcardRegExp + + if (wildcardType === 'identifier' && wildcardAlias) { + regExpPart = createAliasedIdentifierWildcardRegExp(wildcardAlias) + } else if (wildcardType === 'string' && !wildcardAlias) { + regExpPart = stringWildcardRegExp + } else if (wildcardType === 'string' && wildcardAlias) { + regExpPart = createAliasedStringWildcardRegExp(wildcardAlias) + } + + wildcardValuesExtractionRegexText = + wildcardValuesExtractionRegexText.replace( + wildcardWithAlias, + regExpPart, + ) + }, + ) + + const wildcardValuesExtractionRegex = new RegExp( + wildcardValuesExtractionRegexText, + caseInsensitive ? 'i' : undefined, + ) + + /** + * Match file node content with wildcards regexp, so we can extract aliases values later + */ + const wildcardValuesExtractionMatch = fileNodeIdentifierName.match( + wildcardValuesExtractionRegex, + ) + + if (wildcardValuesExtractionMatch === null) { + console.log( + 'wildcardValuesExtractionRegex', + wildcardValuesExtractionRegex, + ) + + console.log('fileNodeIdentifierName', fileNodeIdentifierName) + throw new Error( + 'Wildcard alias extraction RegExp did not match, thus it was build incorrectly.', + ) + } + + /** + * Compare wildcard aliases with values extracted from file node + * - If alias value exist in match context, compare with value from file node + * - If alias value does not exist, add it's value to match context + */ + wildcardsMeta.forEach((wildcardMeta) => { + const { wildcardAlias, wildcardWithAlias, wildcardType } = wildcardMeta + + if (wildcardAlias !== null) { + const existingAlias = wildcardAlias + ? matchContext.getIdentifierAlias(wildcardAlias) || + matchContext.getStringAlias(wildcardAlias) + : null + + const aliasValue = + wildcardValuesExtractionMatch?.groups?.[wildcardAlias] ?? '' + + if (existingAlias !== null) { + const aliasMatches = caseInsensitive + ? existingAlias.aliasValue.toLocaleLowerCase() === + aliasValue.toLocaleLowerCase() + : existingAlias.aliasValue === aliasValue + + levelMatch = levelMatch && aliasMatches + } else { + if (wildcardType === 'identifier') { + matchContext.addIdentifierAlias({ + alias: wildcardAlias, + wildcard: wildcardWithAlias, + aliasValue: aliasValue, + }) + } else if (wildcardType === 'string') { + matchContext.addStringAlias({ + alias: wildcardAlias, + wildcard: wildcardWithAlias, + aliasValue: aliasValue, + }) + } + } + } + }) + } + + return levelMatch +} + export const compareNodes = ( compareParams: CompareNodesParams, ): CompareNodesReturnType => { @@ -20,6 +172,7 @@ export const compareNodes = ( fileNode, queryNode, searchSettings, + matchContext, /** Params used to support comparing nodes which are not on the same level */ queryKeysPrefix = '', fileKeysPrefix = '', @@ -30,6 +183,7 @@ export const compareNodes = ( caseInsensitive, logger: { log, logStepEnd, logStepStart }, parserSettings, + getCodeForNode = () => 'getCodeForNode not provided', } = searchSettings const queryKeysMapper = keyWithPrefix(queryKeysPrefix) @@ -90,9 +244,6 @@ export const compareNodes = ( measureCompare, } - parserSettings.sanitizeNode(fileNode) - parserSettings.sanitizeNode(queryNode) - const maybeCompareResult = parserSettings.compareNodesBeforeWildcardsComparison( compareParams, @@ -113,9 +264,9 @@ export const compareNodes = ( programNodeAndBlockNodeUtils, getIdentifierNodeName, wildcardUtils: { - getWildcardFromNode, + getIdentifierWildcardsFromNode, + getStringWildcardsFromString, anyStringWildcardRegExp, - patternToRegExp, numericWildcard, }, } = parserSettings @@ -129,21 +280,70 @@ export const compareNodes = ( * Support for wildcards in all nodes */ if (isIdentifierNode(queryNode)) { - const wildcardMeta = getWildcardFromNode(queryNode) + const wildcardsMeta = getIdentifierWildcardsFromNode(queryNode) - if (wildcardMeta !== null) { + if (wildcardsMeta.length > 0) { log('comparing wildcard') - const { wildcardType, wildcardWithoutRef } = wildcardMeta - let levelMatch - if (wildcardType === 'nodeTree') { + const firstWildcard = wildcardsMeta[0] + + const isNodesTreeWildcard = firstWildcard.wildcardType === 'nodeTree' + + let levelMatch: boolean + + log('First Wildcard type', firstWildcard.wildcardType) + log('wildcardWithoutAlias', firstWildcard.wildcardWithoutAlias) + + if (isNodesTreeWildcard) { levelMatch = true + + const { wildcardAlias, wildcardWithAlias } = firstWildcard + + /** + * Check if alias has been already found + */ + const existingAlias = wildcardAlias + ? matchContext.getNodesTreeAlias(wildcardAlias) + : null + + const matchedNode = fileNode + + if (existingAlias !== null) { + /** + * If alias exist, compare file nodes tree with matched alias nodes tree + */ + const aliasMatches = compareAst( + matchedNode, + existingAlias.aliasNode, + parserSettings, + ) + + levelMatch = levelMatch && aliasMatches + } else if (wildcardAlias !== null) { + /** + * If alias not exist, add alias to match context + */ + matchContext.addNodesTreeAlias({ + alias: wildcardAlias, + wildcard: wildcardWithAlias, + aliasNode: matchedNode, + aliasValue: getCodeForNode(matchedNode, 'file'), + }) + } } else { - const regex = patternToRegExp(wildcardWithoutRef, caseInsensitive) + const queryValue = getIdentifierNodeName(queryNode) + const fileValue = getIdentifierNodeName(fileNode) levelMatch = isIdentifierNode(fileNode) && - regExpTest(regex, getIdentifierNodeName(fileNode)) + matchStringOrIdentifierAliases({ + queryValue, + fileValue, + wildcardsMeta, + matchContext, + wildcardUtils: parserSettings.wildcardUtils, + caseInsensitive, + }) if (isExact && identifierTypeAnnotationFieldName) { levelMatch = @@ -162,8 +362,9 @@ export const compareNodes = ( ) }) - const queryKeysToTraverseForValidatingMatch = - wildcardType !== 'nodeTree' ? queryKeysWithNodes : [] + const queryKeysToTraverseForValidatingMatch = isNodesTreeWildcard + ? [] + : queryKeysWithNodes measureCompare() @@ -196,18 +397,27 @@ export const compareNodes = ( * Q: "some$$$string"; C: "someBLABLAstring"; // required wildcard * */ if (isStringWithWildcard) { - const regex = patternToRegExp( - stringLikeLiteralUtils.getStringLikeLiteralValue(queryNode), + const queryNodeStringContent = + stringLikeLiteralUtils.getStringLikeLiteralValue(queryNode) + + const fileNodeStringContent = + stringLikeLiteralUtils.getStringLikeLiteralValue(fileNode) + + const wildcardsMeta = getStringWildcardsFromString(queryNodeStringContent) + + const levelMatch = matchStringOrIdentifierAliases({ + queryValue: queryNodeStringContent, + fileValue: fileNodeStringContent, + wildcardsMeta, + matchContext, + wildcardUtils: parserSettings.wildcardUtils, caseInsensitive, - ) - const levelMatch = regExpTest( - regex, - stringLikeLiteralUtils.getStringLikeLiteralValue(fileNode), - ) + }) + measureCompare() return { - levelMatch: levelMatch, + levelMatch, fileKeysToTraverseForValidatingMatch: [], queryKeysToTraverseForValidatingMatch: [], fileKeysToTraverseForOtherMatches, @@ -305,17 +515,32 @@ export const compareNodes = ( } else { primitivePropsCount++ + const sanitizedQueryValue = parserSettings.getSanitizedNodeValue( + queryNode.type as string, + key, + queryValue, + ) + const sanitizedFileValue = parserSettings.getSanitizedNodeValue( + fileNode.type as string, + key, + fileValue, + ) + if ( - typeof queryValue === 'string' && - typeof fileValue === 'string' && + typeof sanitizedQueryValue === 'string' && + typeof sanitizedFileValue === 'string' && caseInsensitive ) { - if (queryValue.toLocaleLowerCase() === fileValue.toLocaleLowerCase()) { + if ( + sanitizedQueryValue.toLocaleLowerCase() === + sanitizedFileValue.toLocaleLowerCase() + ) { matchingPrimitivePropsCount++ } } else if ( - queryValue === fileValue || - JSON.stringify(queryValue) === JSON.stringify(fileValue) + sanitizedQueryValue === sanitizedFileValue || + JSON.stringify(sanitizedQueryValue) === + JSON.stringify(sanitizedFileValue) ) { matchingPrimitivePropsCount++ } diff --git a/packages/core/src/searchStages/getLocationOfMultilineMatch.ts b/packages/core/src/searchStages/getLocationOfMultilineMatch.ts index 2bdb7c3..0f1f93d 100644 --- a/packages/core/src/searchStages/getLocationOfMultilineMatch.ts +++ b/packages/core/src/searchStages/getLocationOfMultilineMatch.ts @@ -39,12 +39,16 @@ export const getLocationOfMultilineMatch = ( const firstSubMatch = subMatches[0] const lastSubMatch = subMatches[subMatches.length - 1] - return { + const resultMatch: Match = { start: firstSubMatch.start, end: lastSubMatch.end, loc: { start: firstSubMatch.loc.start, end: lastSubMatch.loc.end, }, - } as Match + aliases: match.aliases, + node: match.node, + } + + return resultMatch } diff --git a/packages/core/src/searchStages/searchAst.ts b/packages/core/src/searchStages/searchAst.ts index f1372a2..61ea32a 100644 --- a/packages/core/src/searchStages/searchAst.ts +++ b/packages/core/src/searchStages/searchAst.ts @@ -8,21 +8,25 @@ import { traverseAndMatch, test_traverseAndMatchWithVisitors, } from './traverseAndMatch' -import { useTraverseApproachTestOnly } from '../config' +import { useTraverseApproachTestOnly } from '../testOnlyConfig' import { getLocationOfMultilineMatch } from './getLocationOfMultilineMatch' +import { MatchContextAliases } from '../matchContext' export type SearchAstSettings = SearchSettings & { queries: NotNullParsedQuery[] - getCodeForFileNode?: (node: PoorNodeType) => string + getCodeForFileNode: (node: PoorNodeType) => string } export const searchAst = ( fileNode: PoorNodeType, { queries, getCodeForFileNode, ...settings }: SearchAstSettings, + unwrapFileNode = true, + initialContext?: MatchContextAliases, ) => { const allMatches: { query: NotNullParsedQuery; matches: Match[] }[] = [] - const programNode = - settings.parserSettings.getProgramNodeFromRootNode(fileNode) + const nodeToSearch = unwrapFileNode + ? settings.parserSettings.getProgramNodeFromRootNode(fileNode) + : fileNode for (const query of queries) { const { queryNode, isMultistatement, queryCode } = query @@ -56,23 +60,26 @@ export const searchAst = ( ? test_traverseAndMatchWithVisitors : traverseAndMatch - const matches = traverseAndMatchFn(programNode, queryNode, newSettings).map( - (match) => { - if (!isMultistatement) { - return match - } + const matches = traverseAndMatchFn( + nodeToSearch, + queryNode, + newSettings, + initialContext, + ).map((match) => { + if (!isMultistatement) { + return match + } - /** - * For multi-statement queries we search where exactly statements are located within parent node - */ - return getLocationOfMultilineMatch( - match, - queryNode, - newSettings, - traverseAndMatchFn, - ) - }, - ) + /** + * For multi-statement queries we search where exactly statements are located within parent node + */ + return getLocationOfMultilineMatch( + match, + queryNode, + newSettings, + traverseAndMatchFn, + ) + }) allMatches.push({ query, diff --git a/packages/core/src/searchStages/searchFileContent.ts b/packages/core/src/searchStages/searchFileContent.ts index 1edfda6..f7ef615 100644 --- a/packages/core/src/searchStages/searchFileContent.ts +++ b/packages/core/src/searchStages/searchFileContent.ts @@ -57,7 +57,10 @@ export const searchFileContent = ({ allMatches = results .map(({ query, matches }) => { return matches.map((match) => { - const code = prepareCodeResult({ fileContent, ...match }) + const { code, indentationBase } = prepareCodeResult({ + fileContent, + ...match, + }) const [extendedCodeFrame, newStartLine] = getExtendedCodeFrame( match, @@ -73,6 +76,7 @@ export const searchFileContent = ({ code: extendedCodeFrame, startLine: match.loc.start.line + newStartLine, }, + indentationBase, } }) }) diff --git a/packages/core/src/searchStages/traverseAndMatch.ts b/packages/core/src/searchStages/traverseAndMatch.ts index f1be5e5..14df6d2 100644 --- a/packages/core/src/searchStages/traverseAndMatch.ts +++ b/packages/core/src/searchStages/traverseAndMatch.ts @@ -4,8 +4,9 @@ import { PoorNodeType, SearchSettings, SearchSettingsWithOptionalLogger, + ParserSettings, } from '../types' -import { measureStart, noopLogger } from '../utils' +import { measureStart, noopLogger, uniqueItems } from '../utils' import { compareNodes } from './compareNodes' import { validateMatch } from './validateMatch' import { @@ -13,6 +14,11 @@ import { getVisitorKeysForQueryNodeType, getKeysWithNodes, } from '../astUtils' +import { + MatchContext, + createMatchContext, + MatchContextAliases, +} from '../matchContext' /** * @@ -23,55 +29,147 @@ import { * VisitorKeys is a set of keys containing other nodes for each node type */ -const test_traverse_ast = ( +type ParentMeta = { + node: PoorNodeType + key: string + index?: number +} + +export const traverseAst = ( fileNode: PoorNodeType, - settings: SearchSettingsWithOptionalLogger, + isNode: ParserSettings['isNode'], visitors: Record void>, + onNode?: (node: PoorNodeType, parentMeta?: ParentMeta) => void, + parentMeta?: { + node: PoorNodeType + key: string + index?: number + }, ) => { const visitor = visitors[fileNode.type as string] visitor?.(fileNode) + onNode?.(fileNode, parentMeta) const keysWithNodes: string[] = getKeysWithNodes( fileNode, Object.keys(fileNode), - settings.parserSettings.isNode, + isNode, ) - keysWithNodes.forEach((key) => { + for (let i = 0; i < keysWithNodes.length; i++) { + const key = keysWithNodes[i] + if (fileNode[key] !== undefined) { - if (settings.parserSettings.isNode(fileNode[key] as PoorNodeType)) { - test_traverse_ast(fileNode[key] as PoorNodeType, settings, visitors) + if (isNode(fileNode[key] as PoorNodeType)) { + const parentMeta = { + node: fileNode, + key, + } + + traverseAst( + fileNode[key] as PoorNodeType, + isNode, + visitors, + onNode, + parentMeta, + ) } else { const nestedNodesArray = fileNode[key] as PoorNodeType[] - nestedNodesArray.forEach((node) => - test_traverse_ast(node, settings, visitors), - ) + for (let j = 0; j < nestedNodesArray.length; j++) { + const parentMeta = { + node: fileNode, + key, + index: j, + } + const nestedNode = nestedNodesArray[j] + traverseAst(nestedNode, isNode, visitors, onNode, parentMeta) + } } } - }) + } +} + +export const traverseAstIterative = ( + fileNode: PoorNodeType, + isNode: ParserSettings['isNode'], + visitors: Record void>, + onNode?: (node: PoorNodeType) => void, +) => { + const stack = [fileNode] + + while (stack.length > 0) { + const node = stack.pop() as PoorNodeType + + const visitor = visitors[node.type as string] + + visitor?.(node) + onNode?.(node) + + const keysWithNodes: string[] = getKeysWithNodes( + node, + Object.keys(node), + isNode, + ) + + for (let i = 0; i < keysWithNodes.length; i++) { + const key = keysWithNodes[i] + + if (node[key] !== undefined) { + if (isNode(node[key] as PoorNodeType)) { + stack.push(node[key] as PoorNodeType) + } else { + const nestedNodesArray = node[key] as PoorNodeType[] + + for (let j = 0; j < nestedNodesArray.length; j++) { + const nestedNode = nestedNodesArray[j] + stack.push(nestedNode) + } + } + } + } + } } export const test_traverseAndMatchWithVisitors = ( fileNode: PoorNodeType, queryNode: PoorNodeType, settings: SearchSettingsWithOptionalLogger, + initialMatchContext?: MatchContextAliases, ) => { const matches: Match[] = [] const searchInPath = (node: PoorNodeType) => { - const match = validateMatch(node, queryNode, settings) + const matchContext = createMatchContext(initialMatchContext) + + const match = validateMatch(node, queryNode, settings, matchContext) if (match) { - const matchData = getMatchFromNode(node, settings.parserSettings) + const matchData = getMatchFromNode( + node, + settings.parserSettings, + matchContext.getAllAliases(), + ) matches.push(matchData) } } - const visitorsMap = getVisitorKeysForQueryNodeType( - queryNode.type as string, - settings.parserSettings, + const visitorKeysForAliasedTreeWildcards = + initialMatchContext?.nodesTreeAliasesMap + ? Object.values(initialMatchContext?.nodesTreeAliasesMap).map( + (alias) => alias.aliasNode.type as string, + ) + : [] + + const visitorsMap = uniqueItems( + getVisitorKeysForQueryNodeType( + queryNode.type as string, + settings.parserSettings, + ), + ...visitorKeysForAliasedTreeWildcards.map((nodeType) => + getVisitorKeysForQueryNodeType(nodeType, settings.parserSettings), + ), ).reduce( (map, visitorKey) => ({ ...map, @@ -80,7 +178,7 @@ export const test_traverseAndMatchWithVisitors = ( {}, ) - test_traverse_ast(fileNode, settings, visitorsMap) + traverseAst(fileNode, settings.parserSettings.isNode, visitorsMap) return matches } @@ -89,6 +187,7 @@ export const traverseAndMatch = ( fileNode: PoorNodeType, queryNode: PoorNodeType, settings: SearchSettingsWithOptionalLogger & GetCodeForNode, + initialMatchContext?: MatchContextAliases, ) => { const settingsWithLogger: SearchSettings & GetCodeForNode = { ...settings, @@ -97,12 +196,14 @@ export const traverseAndMatch = ( const { logger: { log, logStepEnd, logStepStart }, parserSettings, - getCodeForNode = () => '', + getCodeForNode = () => 'getCodeForNode not provided', } = settingsWithLogger logStepStart('traverse') const matches = [] + const matchContext = createMatchContext(initialMatchContext) + /** * LOOK FOR MATCH START */ @@ -110,6 +211,7 @@ export const traverseAndMatch = ( fileNode, queryNode, searchSettings: settingsWithLogger, + matchContext, }) const foundMatchStart = levelMatch @@ -129,11 +231,17 @@ export const traverseAndMatch = ( ) const measureValidate = measureStart('validate') - const match = validateMatch(fileNode, queryNode, settings) + const match = validateMatch(fileNode, queryNode, settings, matchContext) measureValidate() if (match) { - matches.push(getMatchFromNode(fileNode, parserSettings)) + matches.push( + getMatchFromNode( + fileNode, + parserSettings, + matchContext.getAllAliases(), + ), + ) } } @@ -149,10 +257,11 @@ export const traverseAndMatch = ( fileNode[key] as PoorNodeType, queryNode, settings, + initialMatchContext, ) } else { return (fileNode[key] as PoorNodeType[]).map((node) => - traverseAndMatch(node, queryNode, settings), + traverseAndMatch(node, queryNode, settings, initialMatchContext), ) } } diff --git a/packages/core/src/searchStages/validateMatch.ts b/packages/core/src/searchStages/validateMatch.ts index 56fb93b..c1d8499 100644 --- a/packages/core/src/searchStages/validateMatch.ts +++ b/packages/core/src/searchStages/validateMatch.ts @@ -9,11 +9,13 @@ import { import { getKeyFromObject, noopLogger } from '../utils' import { compareNodes } from './compareNodes' import { Logger } from '../logger' +import { MatchContext } from '../matchContext' export const validateMatch = ( fileNode: PoorNodeType, queryNode: PoorNodeType, settings: SearchSettingsWithOptionalLogger & GetCodeForNode, + matchContext: MatchContext, ) => { const settingsWithLogger: SearchSettings & GetCodeForNode = { ...settings, @@ -22,7 +24,7 @@ export const validateMatch = ( const { mode, parserSettings, - getCodeForNode = () => '', + getCodeForNode = () => 'getCodeForNode not provided', logger: { log, logStepStart }, } = settingsWithLogger @@ -41,6 +43,7 @@ export const validateMatch = ( fileNode: fileNode, queryNode: queryNode, searchSettings: settingsWithLogger, + matchContext, }) if ( @@ -118,7 +121,12 @@ export const validateMatch = ( if ( !newCurrentNode || !newCurrentQueryNode || - !validateMatch(newCurrentNode, newCurrentQueryNode, settings) + !validateMatch( + newCurrentNode, + newCurrentQueryNode, + settings, + matchContext, + ) ) { return false } @@ -131,7 +139,12 @@ export const validateMatch = ( const matchedIndexes: number[] = [] const queryNodesArrSorted = [...queryNodesArr].sort((a, b) => - sortByLeastIdentifierStrength(a, b, parserSettings.wildcardUtils), + sortByLeastIdentifierStrength( + a, + b, + parserSettings.wildcardUtils, + parserSettings.getIdentifierNodeName, + ), ) for (let i = 0; i < queryNodesArrSorted.length; i++) { @@ -141,7 +154,14 @@ export const validateMatch = ( const newFileNode = nodesArr[j] if (!matchedIndexes.includes(j)) { - if (validateMatch(newFileNode, newQueryNode, settings)) { + if ( + validateMatch( + newFileNode, + newQueryNode, + settings, + matchContext, + ) + ) { matchedIndexes.push(j) break } @@ -187,7 +207,7 @@ export const validateMatch = ( if ( !newFileNode || !newQueryNode || - !validateMatch(newFileNode, newQueryNode, settings) + !validateMatch(newFileNode, newQueryNode, settings, matchContext) ) { return false } diff --git a/packages/core/src/testOnlyConfig.ts b/packages/core/src/testOnlyConfig.ts new file mode 100644 index 0000000..3c6e925 --- /dev/null +++ b/packages/core/src/testOnlyConfig.ts @@ -0,0 +1,13 @@ +import { ParserType } from './types' +type TestSettings = { + parserType: ParserType + isTraversal: boolean +} + +declare global { + //eslint-disable-next-line no-var + var testSettings: TestSettings | undefined +} + +export const useTraverseApproachTestOnly = global?.testSettings?.isTraversal +export const testParserTypeOverride = global?.testSettings?.parserType diff --git a/packages/core/src/textSearch.ts b/packages/core/src/textSearch.ts index b3162a3..deb4a68 100644 --- a/packages/core/src/textSearch.ts +++ b/packages/core/src/textSearch.ts @@ -281,6 +281,12 @@ export function textSearch({ }, query: query.toString(), filePath, + // TODO: improve text search types, they do not provide aliases + aliases: { + identifierAliasesMap: {}, + nodesTreeAliasesMap: {}, + stringAliasesMap: {}, + }, } }) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 8e5b155..b515d3d 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,4 +1,5 @@ import { Logger } from './logger' +import { MatchContext, MatchContextAliases } from './matchContext' export type Mode = 'exact' | 'include' | 'include-with-order' | 'text' export type Position = { @@ -11,11 +12,15 @@ export type Location = { end: Position } -export type Match = { +export type MatchPosition = { start: number end: number loc: Location +} + +export type Match = MatchPosition & { node: PoorNodeType + aliases: MatchContextAliases } export type ExtendedCodeFrame = { @@ -28,6 +33,7 @@ export type MatchWithFileInfo = Omit & { code: string filePath: string extendedCodeFrame: ExtendedCodeFrame + indentationBase?: number } export type AstMatch = Omit & { @@ -37,8 +43,22 @@ export type AstMatch = Omit & { export type Matches = Array export type AstMatches = Array +export type PoorNodeTypeParentData = { + node: PoorNodeType + key: string + index?: number +} + export type PoorNodeType = { - [key: string]: string | number | boolean | PoorNodeType[] | PoorNodeType + [key: string]: + | string + | number + | boolean + | null + | PoorNodeType[] + | PoorNodeType +} & { + __parent?: PoorNodeTypeParentData } export type HardStopFlag = { @@ -47,7 +67,12 @@ export type HardStopFlag = { destroy: () => void } -export type ParserType = 'babel' | 'typescript-eslint' | 'esprima' +export type ParserType = + | 'babel' + | 'typescript-eslint-parser' + | 'espree' + | 'esprima' + | 'babel-eslint-parser' export type FileSystemSearchArgs = { filePaths: string[] @@ -112,10 +137,10 @@ export type SearchWorkerData = FileSystemSearchArgs & { } export type SearchSettings = { + parserSettings: ParserSettings logger: Logger caseInsensitive: boolean mode: Mode - parserSettings: ParserSettings } export type SearchSettingsWithOptionalLogger = Omit< @@ -130,16 +155,17 @@ export type GetCodeForNode = { } export type WildcardMeta = { - wildcardType: 'identifier' | 'nodeTree' - wildcardWithRef: string - wildcardWithoutRef: string - wildcardRef: string | null + wildcardType: 'identifier' | 'nodeTree' | 'string' + wildcardWithAlias: string + wildcardWithoutAlias: string + wildcardAlias: string | null } export type CompareNodesParams = { fileNode: PoorNodeType | null queryNode: PoorNodeType | null - searchSettings: SearchSettings + searchSettings: SearchSettings & GetCodeForNode + matchContext: MatchContext /** Params used to support comparing nodes which are not on the same level */ queryKeysPrefix?: string fileKeysPrefix?: string @@ -174,10 +200,12 @@ export type WildcardUtils = { numericWildcard: string disallowedWildcardSequence: string disallowedWildcardRegExp: RegExp - removeIdentifierRefFromWildcard: (identifier: string) => string - getWildcardRefFromIdentifierName: (name: string) => string | null - getWildcardFromString: (name: string) => WildcardMeta | null - getWildcardFromNode: (node: PoorNodeType) => WildcardMeta | null + removeWildcardAliasesFromIdentifierName: (identifier: string) => string + removeWildcardAliasesFromStringLiteral: (str: string) => string + getWildcardAliasFromWildcard: (name: string) => string | null + getIdentifierWildcardsFromString: (name: string) => WildcardMeta[] + getIdentifierWildcardsFromNode: (node: PoorNodeType) => WildcardMeta[] + getStringWildcardsFromString: (content: string) => WildcardMeta[] patternToRegExp: (string: string, caseInsensitive: boolean) => RegExp } @@ -202,6 +230,7 @@ export type ParserSettings = { supportedExtensions: string[] parseCode: (code: string, filePath?: string) => PoorNodeType isNode: (maybeNode: PoorNodeType) => boolean + identifierNodeTypes: string[] isIdentifierNode: (node: PoorNodeType) => boolean astPropsToSkip: (string | { type: string; key: string })[] /** @@ -214,12 +243,13 @@ export type ParserSettings = { getProgramNodeFromRootNode: (node: PoorNodeType) => PoorNodeType getNodeType: (node: PoorNodeType) => string getIdentifierNodeName: (node: PoorNodeType) => string + setIdentifierNodeName: (node: PoorNodeType, name: string) => void unwrapExpressionStatement: (node: PoorNodeType) => PoorNodeType createBlockStatementNode: ( body: PoorNodeType[], - position: Omit, + position: MatchPosition, ) => PoorNodeType - sanitizeNode: (node: PoorNodeType) => void + getSanitizedNodeValue: (type: string, key: string, value: T) => T shouldCompareNode: (node: PoorNodeType) => void wildcardUtils: WildcardUtils compareNodesBeforeWildcardsComparison: NodesComparator @@ -228,7 +258,7 @@ export type ParserSettings = { stringLikeLiteralUtils: StringLikeLiteralUtils numericLiteralUtils: NumericLiteralUtils programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils - getNodePosition: (node: PoorNodeType) => Omit + getNodePosition: (node: PoorNodeType) => MatchPosition getParseErrorLocation: (error: Error) => { line: number; column: number } /** * Alternative node types used to match while in traversal mode diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index 8f98e2f..ea6060e 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -154,11 +154,7 @@ export const nonIdentifierOrKeywordGlobal = new RegExp( 'g', ) -export const dedupMatches = ( - matches: M[], - log: (...args: any[]) => void, - debug = false, -): M[] => { +export const dedupMatches = (matches: M[]): M[] => { const deduped: M[] = [] matches.forEach((match) => { @@ -201,10 +197,12 @@ export const prepareCodeResult = ({ const replaceRegex = new RegExp(`^\\s{0,${firstLineWhiteCharsCount}}`) if (firstLineWhiteCharsCount > 0) { - return lines.map((line) => line.replace(replaceRegex, '')).join('\n') + const code = lines.map((line) => line.replace(replaceRegex, '')).join('\n') + + return { code, indentationBase: firstLineWhiteCharsCount } } - return lines.join('\n') + return { code: lines.join('\n'), indentationBase: 0 } } export const isNullOrUndef = (val: any) => val === null || val === undefined @@ -232,3 +230,17 @@ export const noopLogger: Logger = { logStepEnd: () => undefined, logStepStart: () => undefined, } + +export const groupBy = >( + arr: T[], + key: K, +) => { + return Object.values( + arr.reduce((grouped, duplicate) => { + const maybeExistingGroup = grouped[duplicate[key]] ?? [] + grouped[duplicate[key]] = [...maybeExistingGroup, duplicate] + + return grouped + }, {} as Record), + ) +} diff --git a/packages/core/src/wildcardUtilsFactory.ts b/packages/core/src/wildcardUtilsFactory.ts index ecea612..416f28a 100644 --- a/packages/core/src/wildcardUtilsFactory.ts +++ b/packages/core/src/wildcardUtilsFactory.ts @@ -1,74 +1,148 @@ import { PoorNodeType, WildcardMeta, WildcardUtils } from './types' -import { nonIdentifierOrKeywordGlobal } from './utils' +import { nonIdentifierOrKeywordGlobal, regExpTest } from './utils' export const createWildcardUtils = ( identifierNodeTypes: string[], numericWildcard: string, identifierWildcardBase: string, + getIdentifierNodeName: (node: PoorNodeType) => string, stringWildcardBase = identifierWildcardBase, ): WildcardUtils => { const identifierWildcard = identifierWildcardBase.repeat(2) const nodesTreeWildcard = identifierWildcardBase.repeat(3) - const removeIdentifierRefFromWildcard = (name: string) => { - const containsWildcardRegExp = new RegExp(`^\\${identifierWildcardBase}`) - const removeIdRefRegExp = new RegExp( - `(?<=(\\${identifierWildcardBase}){2,3})_(\\w)+$`, - ) + const createRemoveWildcardAliasesFromIdentifierName = + (wildcardBase: string) => (name: string) => { + const containsWildcardWithInvalidRefRegExp = new RegExp( + `(\\${wildcardBase}){2,3}([a-zA-Z0-9])+_(\\${wildcardBase}){2,3}`, + ) + + const containsWildcardWithInvalidRefRegExp2 = new RegExp( + `(\\${wildcardBase}){2,3}_([a-zA-Z0-9])+(\\${wildcardBase}){2,3}`, + ) + + const containsWildcardWithInvalidRefRegExp3 = new RegExp( + `(\\${wildcardBase}){2,3}_([a-zA-Z0-9])+_(\\${wildcardBase}){2,3}`, + ) + + const removeIdRefRegExp = new RegExp( + `(?<=(\\${wildcardBase}){2,3})_([a-zA-Z0-9])+(_)?`, + ) + + let nameWithRemovedWildcardsAliases = name + + while ( + regExpTest(removeIdRefRegExp, nameWithRemovedWildcardsAliases) && + !regExpTest( + containsWildcardWithInvalidRefRegExp, + nameWithRemovedWildcardsAliases, + ) && + !regExpTest( + containsWildcardWithInvalidRefRegExp2, + nameWithRemovedWildcardsAliases, + ) && + !regExpTest( + containsWildcardWithInvalidRefRegExp3, + nameWithRemovedWildcardsAliases, + ) + ) { + nameWithRemovedWildcardsAliases = + nameWithRemovedWildcardsAliases.replace(removeIdRefRegExp, '') + } - if (containsWildcardRegExp.test(name)) { - return name.replace(removeIdRefRegExp, '') + return nameWithRemovedWildcardsAliases } - return name - } + const removeWildcardAliasesFromIdentifierName = + createRemoveWildcardAliasesFromIdentifierName(identifierWildcardBase) - const getWildcardRefFromIdentifierName = (name: string) => { + const removeWildcardAliasesFromStringLiteral = + createRemoveWildcardAliasesFromIdentifierName(stringWildcardBase) + + const getWildcardAliasFromWildcard = (name: string) => { const getRefRegExp = new RegExp( - `(?<=(\\${identifierWildcardBase}){2,3}_)(\\w)+$`, + `(?<=(\\${identifierWildcardBase}){2,3})_([a-zA-Z0-9])+(?=(_?))`, 'g', ) const matchedRef = name.match(getRefRegExp) - return matchedRef?.[0] || null + return matchedRef?.[0]?.replace(/_/g, '') || null } - const getWildcardFromString = ( - maybeWildcardString: string, - ): null | WildcardMeta => { + const getWildcardWithAliasFromIdentifierName = (name: string) => { + const getRefRegExp = new RegExp( + `((\\${identifierWildcardBase}){2,3}_([a-zA-Z0-9])+(_)?)|((\\${identifierWildcardBase}){2,3})`, + 'g', + ) + + const matchedWildcard = name.match(getRefRegExp) + + return matchedWildcard?.[0] as string + } + + const hasWildcard = (maybeWildcardString: string) => { const hasIdentifierWildcard = maybeWildcardString.includes(identifierWildcard) const hasNodeTreeWildcard = maybeWildcardString.includes(nodesTreeWildcard) - const hasWildcard = hasIdentifierWildcard || hasNodeTreeWildcard - if (hasWildcard) { - const wildcardWithoutRef = - removeIdentifierRefFromWildcard(maybeWildcardString) + return hasIdentifierWildcard || hasNodeTreeWildcard + } + + const getIdentifierWildcardsFromString = ( + maybeWildcardString: string, + ): WildcardMeta[] => { + let maybeWildcardStringToDecompose = maybeWildcardString + const wildcardsMeta: WildcardMeta[] = [] + + while (hasWildcard(maybeWildcardStringToDecompose)) { + const hasNodeTreeWildcard = + maybeWildcardStringToDecompose.includes(nodesTreeWildcard) + + const wildcardWithAlias = getWildcardWithAliasFromIdentifierName( + maybeWildcardStringToDecompose, + ) + + const wildcardAlias = getWildcardAliasFromWildcard(wildcardWithAlias) - return { + const wildcardWithoutAlias = + removeWildcardAliasesFromIdentifierName(wildcardWithAlias) + + wildcardsMeta.push({ wildcardType: hasNodeTreeWildcard ? 'nodeTree' : 'identifier', - wildcardWithRef: maybeWildcardString, - wildcardWithoutRef, - wildcardRef: getWildcardRefFromIdentifierName(maybeWildcardString), - } + wildcardWithAlias, + wildcardWithoutAlias, + wildcardAlias, + }) + + const wildcardEndIdx = + maybeWildcardStringToDecompose.indexOf(wildcardWithAlias) + + wildcardWithAlias.length + + maybeWildcardStringToDecompose = + maybeWildcardStringToDecompose.substring(wildcardEndIdx) } - return null + return wildcardsMeta } - const getWildcardFromNode = (node: PoorNodeType): null | WildcardMeta => { + const getIdentifierWildcardsFromNode = ( + node: PoorNodeType, + ): WildcardMeta[] => { if (typeof node.type !== 'string') { - return null + return [] } const isIdentifierNode = typeof node.type === 'string' && identifierNodeTypes.includes(node.type) - if (isIdentifierNode && typeof node.name === 'string') { - return getWildcardFromString(node.name) + if (isIdentifierNode && typeof getIdentifierNodeName(node) === 'string') { + return getIdentifierWildcardsFromString(getIdentifierNodeName(node)) } + /** + * TODO: make it generic + */ const isTypeReferenceNode = node.type === 'TSTypeReference' if (isTypeReferenceNode) { @@ -76,11 +150,18 @@ export const createWildcardUtils = ( ?.name as string | undefined if (typeof maybeWildcardString === 'string') { - return getWildcardFromString(maybeWildcardString) + return getIdentifierWildcardsFromString(maybeWildcardString) } } - return null + return [] + } + + const getStringWildcardsFromString = (content: string): WildcardMeta[] => { + // Might need to have separate implementation for some other programming langs, good for now + return getIdentifierWildcardsFromString(content).map( + ({ wildcardType, ...rest }) => ({ wildcardType: 'string', ...rest }), + ) } const optionalStringWildcardRegExp = new RegExp( @@ -92,6 +173,11 @@ export const createWildcardUtils = ( 'g', ) + const anyStringWildcardRegExp = new RegExp( + `(\\${stringWildcardBase}){2,3}`, + 'g', + ) + const disallowedWildcardRegExp = new RegExp( `(\\${identifierWildcardBase}){4,}(?!\\{)`, ) @@ -128,16 +214,18 @@ export const createWildcardUtils = ( return { optionalStringWildcardRegExp, requiredStringWildcardRegExp, - anyStringWildcardRegExp: new RegExp(`(\\${stringWildcardBase}){2,3}`, 'g'), + anyStringWildcardRegExp, identifierWildcard, nodesTreeWildcard, numericWildcard, disallowedWildcardSequence: identifierWildcardBase.repeat(4), disallowedWildcardRegExp, - removeIdentifierRefFromWildcard, - getWildcardRefFromIdentifierName, - getWildcardFromString, - getWildcardFromNode, + removeWildcardAliasesFromIdentifierName, + removeWildcardAliasesFromStringLiteral, + getWildcardAliasFromWildcard, + getIdentifierWildcardsFromString, + getIdentifierWildcardsFromNode, + getStringWildcardsFromString, patternToRegExp, } } diff --git a/packages/core/tools/babel.plugins.js b/packages/core/tools/babel.plugins.js index 4959e3d..2a8dbcb 100644 --- a/packages/core/tools/babel.plugins.js +++ b/packages/core/tools/babel.plugins.js @@ -1,6 +1,5 @@ module.exports = function plugin() { const babelEnv = process.env.BABEL_ENV - console.log('BABEL_ENV', babelEnv) if (babelEnv !== 'production' && babelEnv !== 'test') { return {} diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json index e15ccef..e0f99b7 100644 --- a/packages/core/tsconfig.build.json +++ b/packages/core/tsconfig.build.json @@ -1,11 +1,11 @@ { "extends": "./tsconfig.json", - "include": ["src"], + "include": ["src", "./declarations.d.ts"], "compilerOptions": { "paths": {}, "declaration": true, "outDir": "dist", "noEmit": false, "emitDeclarationOnly": true - }, -} \ No newline at end of file + } +} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 4e5ba5f..3727db7 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -3,19 +3,17 @@ "compilerOptions": { "baseUrl": "./", "paths": { - "/*": [ - "src/*" - ] + "/*": ["src/*"] }, "skipLibCheck": true, "declaration": false, "noEmit": true }, "exclude": [ - "__tests__/**/__fixtures__", - "__tests__/**/__fixturesOther__", + "__tests__/__fixtures__", + "__tests__/__fixturesOther__", "dist", "node_modules", "tools/*.js" ] -} \ No newline at end of file +} diff --git a/packages/eslint/__tests__/JavaScript/javaScriptParsers.test.ts b/packages/eslint/__tests__/JavaScript/javaScriptParsers.test.ts new file mode 100644 index 0000000..04c581a --- /dev/null +++ b/packages/eslint/__tests__/JavaScript/javaScriptParsers.test.ts @@ -0,0 +1,436 @@ +import { rules } from '../../src/index' +import { RuleOption } from '../../src/types' + +const codeWithoutMatches = ` + // Different order of keys + const obj = { + prop10: 'World', + prop8: [ + { value: 'C', id: 3 }, + { id: 4, value: 'D' }, + ], + } + + { + const a = 1 === 0 + class A {} + } + + const Comp = () => (
not-test
); + + \`pre-not\${value} + + post\` +` + +const codeWithMatches = ` + const obj = { + prop1: 'Hello', + prop2: 42, + prop3: true, + prop4: [ + { name: 'John', age: 30 }, + { name: 'Jane', age: 25 }, + ], + prop5: { + prop6: [ + { id: 1, value: 'A' }, + { id: 2, value: 'B' }, + ], + prop7: { + prop8: [ + { id: 3, value: 'C' }, + { id: 4, value: 'D' }, + ], + prop10: 'World', + }, + }, + } + + { + const a = 1 === 0 + fn(obj) + fn(newobj) + class A {} + } + + const result = obj.key.fn() + + functionCall(obj.key.fn()) + + obj.prop1.prop2.prop3 + + const Comp = () => (
test
); + + \`pre\${value} + + post\` + +` + +describe('JavaScript code samples', () => { + describe('nested exact query', () => { + const options: [Array] = [ + [ + { + query: `({ + prop8: [ + { id: 3, value: 'C' }, + { id: 4, value: 'D' }, + ], + prop10: 'World', + })`, + mode: 'exact', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 15, + column: 14, + endLine: 21, + endColumn: 8, + }, + ], + }, + ], + }) + }) + + describe('nested include query', () => { + const options: [Array] = [ + [ + { + query: `({ + prop3: true, + prop4: [ + { age: 25 }, + ], + prop5: { + prop7: { + prop8: [ + { id: 3, }, + ], + }, + }, + })`, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 2, + column: 15, + endLine: 23, + endColumn: 4, + }, + ], + }, + ], + }) + }) + + describe('nested include-with-order query', () => { + const options: [Array] = [ + [ + { + query: `({ + prop8: [ + { id: 3, value: 'C' }, + { id: 4 }, + ], + prop10: 'World', + })`, + mode: 'include-with-order', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 15, + column: 14, + endLine: 21, + endColumn: 8, + }, + ], + }, + ], + }) + }) + + describe('multiline include query', () => { + const options: [Array] = [ + [ + { + query: ` + const obj = {} + + { + fn(obj) + } + `, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 2, + column: 3, + endLine: 30, + endColumn: 4, + }, + ], + }, + ], + }) + }) + + describe('multiline include query with identifier alias', () => { + const options: [Array] = [ + [ + { + query: ` + const $$_ref1 = {} + + { + fn(new$$_ref1_) + } + `, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 2, + column: 3, + endLine: 30, + endColumn: 4, + }, + ], + }, + ], + }) + }) + + describe('multiline include query with nodes tree wildcard alias', () => { + const options: [Array] = [ + [ + { + query: ` + const result = $$$_chainExp + + functionCall($$$_chainExp) + `, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 32, + column: 3, + endLine: 34, + endColumn: 29, + }, + ], + }, + ], + }) + }) + + describe('query with JSX', () => { + const options: [Array] = [ + [ + { + query: ` + const Comp = () =>
test
+ `, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 38, + column: 3, + endLine: 38, + endColumn: 40, + }, + ], + }, + ], + }) + }) + + describe('query with multiline template string', () => { + const options: [Array] = [ + [ + { + query: `\`pre + \${value} + + post\` + `, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 40, + column: 3, + endLine: 42, + endColumn: 8, + }, + ], + }, + ], + }) + }) + + if (!(global.ruleTester as any).testerConfig.parser.includes('esprima')) { + describe('optional chaining query that matches normal chaining', () => { + const options: [Array] = [ + [ + { + query: ` + obj?.prop1?.prop2?.prop3 + `, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 36, + column: 3, + endLine: 36, + endColumn: 24, + }, + ], + }, + ], + }) + }) + } +}) diff --git a/packages/eslint/__tests__/TypeScript/typeScriptParsers.test.ts b/packages/eslint/__tests__/TypeScript/typeScriptParsers.test.ts new file mode 100644 index 0000000..e6226da --- /dev/null +++ b/packages/eslint/__tests__/TypeScript/typeScriptParsers.test.ts @@ -0,0 +1,156 @@ +import { rules } from '../../src/index' +import { RuleOption } from '../../src/types' + +const codeWithoutMatches = ` + +` + +const codeWithMatches = ` + const a: SomeType = ''; + let b: SomeType = ''; + let c: OtherType & { key: SomeType } = ''; + + interface B { + key: string; + key_2?: number; + } + + const getInitialValues = ( + assignment: AssignmentPopulated, + ): AssignmentFormValues => { + if (!assignment) { + return undefined; + } + }; +` + +describe('TypeScript code samples', () => { + describe('should match optional interface filed in include mode with query without optional interface', () => { + const options: [Array] = [ + [ + { + query: ` + interface B { + key_2: number; + } + `, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 6, + column: 3, + endLine: 9, + endColumn: 4, + }, + ], + }, + ], + }) + }) + + describe('Should match type in variable type annotation', () => { + const options: [Array] = [ + [ + { + query: `SomeType`, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 2, + column: 12, + endLine: 2, + endColumn: 20, + }, + { + message: 'Restricted code pattern', + line: 3, + column: 10, + endLine: 3, + endColumn: 18, + }, + { + message: 'Restricted code pattern', + line: 4, + column: 29, + endLine: 4, + endColumn: 37, + }, + ], + }, + ], + }) + }) + + describe('should match function declaration with types by query without types', () => { + const options: [Array] = [ + [ + { + query: ` + const getInitialValues = ( + assignment, + ) => { + + }; + `, + mode: 'include', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: codeWithoutMatches, + options, + }, + ], + invalid: [ + { + code: codeWithMatches, + options, + errors: [ + { + message: 'Restricted code pattern', + line: 11, + column: 3, + endLine: 17, + endColumn: 5, + }, + ], + }, + ], + }) + }) +}) diff --git a/packages/eslint/__tests__/common/options.test.ts b/packages/eslint/__tests__/common/options.test.ts new file mode 100644 index 0000000..a04cb12 --- /dev/null +++ b/packages/eslint/__tests__/common/options.test.ts @@ -0,0 +1,332 @@ +import { rules } from '../../src/index' +import { RuleOption } from '../../src/types' + +describe('Rule options tests', () => { + const rootPath = process.cwd() + + describe('should run config with default error messages', () => { + const options: [Array] = [[{ query: `invalidIdentifier` }]] + + global.ruleTester.run('@codeque', rules.error, { + valid: [{ code: 'validIdentifier', options }], + invalid: [ + { + code: 'invalidIdentifier', + options, + errors: ['Restricted code pattern'], + }, + ], + }) + }) + + describe('should run config with multiple queries', () => { + const options: [Array] = [ + [{ query: `invalidIdentifier` }, { query: 'otherInvalidIdentifier' }], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [{ code: 'validIdentifier', options }], + invalid: [ + { + code: 'invalidIdentifier;otherInvalidIdentifier', + options, + errors: ['Restricted code pattern', 'Restricted code pattern'], + }, + ], + }) + }) + + describe('should run config with custom error messages', () => { + const options: [Array] = [ + [ + { query: `invalidIdentifier` }, + { query: 'otherInvalidIdentifier', message: "Don't use this code" }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [{ code: 'validIdentifier', options }], + invalid: [ + { + code: 'invalidIdentifier;otherInvalidIdentifier', + options, + errors: ['Restricted code pattern', "Don't use this code"], + }, + ], + }) + }) + + describe('should run config with include file paths filter', () => { + const options: [Array] = [ + [{ query: `invalidIdentifier`, includeFiles: ['**/includeDir/file.*'] }], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: 'invalidIdentifier', + filename: rootPath + '/path/to/dir/file.js', + options, + }, + ], + invalid: [ + { + code: 'invalidIdentifier', + filename: rootPath + '/path/to/includeDir/file.js', + options, + errors: ['Restricted code pattern'], + }, + ], + }) + }) + + describe('should run config with exclude file paths filter', () => { + const options: [Array] = [ + [{ query: `invalidIdentifier`, excludeFiles: ['**/excludeDir/file.*'] }], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: 'invalidIdentifier', + filename: rootPath + '/path/to/excludeDir/file.js', + options, + }, + ], + invalid: [ + { + code: 'invalidIdentifier', + filename: rootPath + '/path/to/dir/file.js', + options, + errors: ['Restricted code pattern'], + }, + ], + }) + }) + + describe('should run config with include and exclude file paths filter', () => { + const options: [Array] = [ + [ + { + query: `invalidIdentifier`, + excludeFiles: ['**/excludeDir/**/file.*'], + includeFiles: ['**/includeDir/**/file.*'], + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: 'invalidIdentifier', + filename: rootPath + '/includeDir/excludeDir/file.js', + options, + }, + { + code: 'invalidIdentifier', + filename: rootPath + '/otherDir/excludeDir/file.js', + options, + }, + ], + invalid: [ + { + code: 'invalidIdentifier', + filename: rootPath + '/includeDir/otherDir/file.js', + options, + errors: ['Restricted code pattern'], + }, + ], + }) + }) + + describe('should run config with queries with different search modes', () => { + describe('include mode', () => { + const options: [Array] = [ + [ + { + query: `({ key: 'value' })`, + mode: 'include', + }, + { + query: `({ key: 'value' })`, + // assert default include mode + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: `const obj = { kkk: 'value' }`, + options, + }, + ], + invalid: [ + { + code: `const obj = { key: 'value', key2: 0 }`, + options, + errors: ['Restricted code pattern', 'Restricted code pattern'], + }, + ], + }) + }) + + describe('exact mode', () => { + const options: [Array] = [ + [ + { + query: `({ key: 'value' })`, + mode: 'exact', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: `const obj = { kkk: 'value' }`, + options, + }, + { + code: `const obj = { key: 'value', key2: 0 }`, + options, + }, + ], + invalid: [ + { + code: `const obj = { key: 'value' }`, + options, + errors: ['Restricted code pattern'], + }, + ], + }) + }) + + describe('include-with-order mode', () => { + const options: [Array] = [ + [ + { + query: `({ key1: 'value', key2: 'value2' })`, + mode: 'include-with-order', + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: `const obj = { key1: 'value' }`, + options, + }, + { + code: `const obj = { key2: 'value2', key1: 'value' }`, + options, + }, + ], + invalid: [ + { + code: `const obj = { key1: 'value', key2: 'value2' }`, + options, + errors: ['Restricted code pattern'], + }, + ], + }) + }) + + describe('text (unsupported)', () => { + const options: [Array] = [ + [ + { + query: `key1: 'value'`, + mode: 'text', + }, + ], + ] + + expect(() => { + // @ts-ignore we don't need all props for this test + rules.error.create({ + options: options, + // @ts-ignore we don't need all props for this test + getSourceCode: jest.fn(() => ({ text: '' })), + getPhysicalFilename: jest.fn(), + getCwd: jest.fn(), + parserPath: + 'project/node_modules/@typescript-eslint/parser/dist/index.js', + }) + }).toThrowError('"Text" search mode is not supported.') + }) + }) + + describe('should run config with case sensitive and insensitive queries', () => { + describe('case sensitive', () => { + const options: [Array] = [ + [ + { + query: `invalidIdentifier`, + mode: 'include', + caseInsensitive: false, + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: `validIdentifier`, + options, + }, + { + code: `invalididentifier`, + options, + }, + ], + invalid: [ + { + code: `invalidIdentifier`, + options, + errors: ['Restricted code pattern'], + }, + ], + }) + }) + + describe('case insensitive', () => { + const options: [Array] = [ + [ + { + query: `invalidIdentifier`, + mode: 'include', + caseInsensitive: true, + }, + { + query: `invalidIdentifier`, + mode: 'include', + // assert default case insensitive + }, + ], + ] + + global.ruleTester.run('@codeque', rules.error, { + valid: [ + { + code: `validIdentifier`, + options, + }, + ], + invalid: [ + { + code: `invalididentifier`, + options, + errors: ['Restricted code pattern', 'Restricted code pattern'], + }, + { + code: `invalidIdentifier`, + options, + errors: ['Restricted code pattern', 'Restricted code pattern'], + }, + ], + }) + }) + }) +}) diff --git a/packages/eslint/__tests__/utils.test.ts b/packages/eslint/__tests__/common/utils.test.ts similarity index 88% rename from packages/eslint/__tests__/utils.test.ts rename to packages/eslint/__tests__/common/utils.test.ts index f335825..a37c714 100644 --- a/packages/eslint/__tests__/utils.test.ts +++ b/packages/eslint/__tests__/common/utils.test.ts @@ -1,4 +1,4 @@ -import { extractParserNameFromResolvedPath } from '../src/utils' +import { extractParserNameFromResolvedPath } from '../../src/utils' it('should extract parser name from file path', () => { const parserWithOrg = '@typescript-eslint/parser' diff --git a/packages/eslint/declarations.d.ts b/packages/eslint/declarations.d.ts new file mode 100644 index 0000000..dbdeeb5 --- /dev/null +++ b/packages/eslint/declarations.d.ts @@ -0,0 +1,5 @@ +import { RuleTester } from 'eslint' +declare global { + //eslint-disable-next-line no-var + var ruleTester: RuleTester +} diff --git a/packages/eslint/jest.config.js b/packages/eslint/jest.config.js index 58ef380..8a6f932 100644 --- a/packages/eslint/jest.config.js +++ b/packages/eslint/jest.config.js @@ -1,25 +1,74 @@ -const { pathsToModuleNameMapper } = require('ts-jest') -const fs = require('fs') - -const tsConfig = JSON.parse( - fs - .readFileSync(__dirname + '/tsconfig.json') - .toString() - .replace(/^(\s)*\/\//gm, '') - .replace(/\/\*.+?\*\//gm, ''), -) - -module.exports = { +const sharedConfig = { preset: 'ts-jest', testEnvironment: 'node', - moduleNameMapper: pathsToModuleNameMapper(tsConfig.compilerOptions.paths, { - prefix: '', - }), + setupFiles: ['/jest/jest.shared.setup.ts'], +} + +module.exports = { testPathIgnorePatterns: [ '__fixtures__', '__fixturesOther__', 'ts-dist', 'utils.ts', ], - setupFiles: ['./jest.setup.js'], + projects: [ + { + displayName: { name: 'common', color: 'white' }, + ...sharedConfig, + setupFiles: [ + ...sharedConfig.setupFiles, + '/jest/jest.common.setup.ts', + ], + testMatch: ['/__tests__/common/**/*.test.ts'], + }, + { + displayName: { name: 'typescript-eslint-parser', color: 'magenta' }, + ...sharedConfig, + setupFiles: [ + ...sharedConfig.setupFiles, + '/jest/jest.typescript-eslint-parser.setup.ts', + ], + testMatch: [ + '/__tests__/JavaScript/**/*.test.ts', + '/__tests__/TypeScript/**/*.test.ts', + '/__tests__/common/options.test.ts', + ], + }, + { + displayName: { name: 'babel-eslint-parser', color: 'yellow' }, + ...sharedConfig, + setupFiles: [ + ...sharedConfig.setupFiles, + '/jest/jest.babel-eslint-parser.setup.ts', + ], + testMatch: [ + '/__tests__/JavaScript/**/*.test.ts', + '/__tests__/common/options.test.ts', + ], + }, + { + displayName: { name: 'esprima', color: 'gray' }, + ...sharedConfig, + setupFiles: [ + ...sharedConfig.setupFiles, + '/jest/jest.esprima.setup.ts', + ], + testMatch: [ + '/__tests__/JavaScript/**/*.test.ts', + '/__tests__/common/options.test.ts', + ], + }, + { + displayName: { name: 'espree', color: 'blue' }, + ...sharedConfig, + setupFiles: [ + ...sharedConfig.setupFiles, + '/jest/jest.espree.setup.ts', + ], + testMatch: [ + '/__tests__/JavaScript/**/*.test.ts', + '/__tests__/common/options.test.ts', + ], + }, + ], } diff --git a/packages/eslint/jest.setup.js b/packages/eslint/jest.setup.js deleted file mode 100644 index b1e2bd6..0000000 --- a/packages/eslint/jest.setup.js +++ /dev/null @@ -1 +0,0 @@ -process.env.NODE_ENV = 'test' diff --git a/packages/eslint/jest/jest.babel-eslint-parser.setup.ts b/packages/eslint/jest/jest.babel-eslint-parser.setup.ts new file mode 100644 index 0000000..3b62c93 --- /dev/null +++ b/packages/eslint/jest/jest.babel-eslint-parser.setup.ts @@ -0,0 +1,17 @@ +import { RuleTester } from 'eslint' + +global.ruleTester = new RuleTester({ + parser: require.resolve('@babel/eslint-parser'), + plugins: ['@codeque'], + parserOptions: { + requireConfigFile: false, + allowImportExportEverywhere: true, + babelOptions: { + babelrc: false, + configFile: false, + parserOpts: { + plugins: ['jsx'], + }, + }, + }, +}) diff --git a/packages/eslint/jest/jest.common.setup.ts b/packages/eslint/jest/jest.common.setup.ts new file mode 100644 index 0000000..c2f3b6e --- /dev/null +++ b/packages/eslint/jest/jest.common.setup.ts @@ -0,0 +1,10 @@ +import { RuleTester } from 'eslint' + +global.ruleTester = new RuleTester({ + parser: require.resolve('@typescript-eslint/parser'), + plugins: ['@codeque'], + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + }, +}) diff --git a/packages/eslint/jest/jest.espree.setup.ts b/packages/eslint/jest/jest.espree.setup.ts new file mode 100644 index 0000000..379d237 --- /dev/null +++ b/packages/eslint/jest/jest.espree.setup.ts @@ -0,0 +1,14 @@ +import { RuleTester } from 'eslint' + +global.ruleTester = new RuleTester({ + parser: require.resolve('espree'), + plugins: ['@codeque'], + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { + jsx: true, + globalReturn: true, + impliedStrict: false, + }, + }, +}) diff --git a/packages/eslint/jest/jest.esprima.setup.ts b/packages/eslint/jest/jest.esprima.setup.ts new file mode 100644 index 0000000..15efa8c --- /dev/null +++ b/packages/eslint/jest/jest.esprima.setup.ts @@ -0,0 +1,9 @@ +import { RuleTester } from 'eslint' + +global.ruleTester = new RuleTester({ + parser: require.resolve('esprima'), + plugins: ['@codeque'], + parserOptions: { + jsx: true, + }, +}) diff --git a/packages/eslint/jest/jest.shared.setup.ts b/packages/eslint/jest/jest.shared.setup.ts new file mode 100644 index 0000000..d95e487 --- /dev/null +++ b/packages/eslint/jest/jest.shared.setup.ts @@ -0,0 +1,16 @@ +process.env.NODE_ENV = 'test' + +global.performance = { + now: jest.fn().mockReturnValue(1), +} as unknown as Performance + +global.console = { + ...console, + warn: (...inputs) => { + if (typeof inputs[0] === 'string' && inputs[0].includes('Browserslist')) { + return + } else { + return console.log('console.warn', ...inputs) + } + }, +} diff --git a/packages/eslint/jest/jest.typescript-eslint-parser.setup.ts b/packages/eslint/jest/jest.typescript-eslint-parser.setup.ts new file mode 100644 index 0000000..5f4794b --- /dev/null +++ b/packages/eslint/jest/jest.typescript-eslint-parser.setup.ts @@ -0,0 +1,14 @@ +import { RuleTester } from 'eslint' + +global.ruleTester = new RuleTester({ + parser: require.resolve('@typescript-eslint/parser'), + plugins: ['@codeque'], + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + ecmaFeatures: { + globalReturn: true, + jsx: true, + }, + }, +}) diff --git a/packages/eslint/package.json b/packages/eslint/package.json index 4f9c7ae..187008f 100644 --- a/packages/eslint/package.json +++ b/packages/eslint/package.json @@ -21,8 +21,12 @@ "url": "https://github.com/codeque-co/codeque" }, "devDependencies": { + "@babel/eslint-parser": "^7.21.8", "@types/jest": "^27.0.3", + "@typescript-eslint/parser": "^5.53.0", "eslint": "^8.34.0", + "espree": "^9.5.2", + "esprima": "^4.0.1", "jest": "^27.4.4", "release-it": "^15.0.0", "ts-jest": "^27.1.1" diff --git a/packages/eslint/src/index.ts b/packages/eslint/src/index.ts index 4bfd65b..0a4b9be 100644 --- a/packages/eslint/src/index.ts +++ b/packages/eslint/src/index.ts @@ -1,6 +1,6 @@ import { createLintCode } from './lintCode' -const rules = { +export const rules = { error: createLintCode('problem'), warning: createLintCode('suggestion'), } diff --git a/packages/eslint/src/lintCode.ts b/packages/eslint/src/lintCode.ts index a3d75bc..1019771 100644 --- a/packages/eslint/src/lintCode.ts +++ b/packages/eslint/src/lintCode.ts @@ -1,6 +1,5 @@ import { Rule } from 'eslint' import { - Mode, parseQueries, __internal, NotNullParsedQuery, @@ -13,7 +12,9 @@ import { ParsedQueryWithSettings, VisitorsSearchArrayMap, VisitorsSearchMap, + RuleOption, } from './types' + import { formatQueryParseErrors, createMultipleSearchFunctionsExecutor, @@ -51,7 +52,7 @@ export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ docs: { description: 'Lint anything based on code sample(s).', }, - fixable: 'code', + fixable: 'code' as const, schema: [ { type: 'array', @@ -91,16 +92,7 @@ export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ const prepStart = performance.now() const parser = assertCompatibleParser(context.parserPath) - const settings = context.options[0] as - | Array<{ - mode?: Mode - query?: string - message?: string - caseInsensitive?: boolean - includeFiles?: string[] - excludeFiles?: string[] - }> - | undefined + const settings = context.options[0] as Array | undefined if (!settings || settings.length === 0) { return {} @@ -112,11 +104,16 @@ export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ const defaultCaseInsensitive = true const queryCodes = settings.map(({ query }) => query) + const searchModes = settings.map(({ mode }) => mode).filter(Boolean) if (queryCodes.includes(undefined) || queryCodes.includes(null as any)) { throw new Error('Each setting has to have at least query defined.') } + if (searchModes.includes('text')) { + throw new Error('"Text" search mode is not supported.') + } + const parserSettings = __internal.parserSettingsMap[ parserNamesMappingsToCodeQueInternal[parser] @@ -168,6 +165,7 @@ export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ })) as ParsedQueryWithSettings[] preparingQueriesTime += performance.now() - startPreparingQueries + const startFilteringFilePaths = performance.now() const queriesWithSettingsMatchedFilePath = parsedQueriesWithSettings.filter( ({ includeFiles, excludeFiles }) => { @@ -232,14 +230,20 @@ export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ searchTimeForQueries[queryCode] = 0 } + const matchContext = __internal.createMatchContext() const match = __internal.validateMatch( node, queryWithSettings.parsedQuery.queryNode, searchOptions, + matchContext, ) if (match) { - let matchData = __internal.getMatchFromNode(node, parserSettings) + let matchData = __internal.getMatchFromNode( + node, + parserSettings, + matchContext.getAllAliases(), + ) if (isMultistatement) { /** @@ -310,6 +314,6 @@ export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ preparingVisitorsTime += performance.now() - preparingVisitorsStart preparationTime += performance.now() - prepStart - return visitors + return visitors as unknown as Record void> }, }) diff --git a/packages/eslint/src/types.ts b/packages/eslint/src/types.ts index 64b9b28..a29e31c 100644 --- a/packages/eslint/src/types.ts +++ b/packages/eslint/src/types.ts @@ -1,4 +1,5 @@ import { Mode, NotNullParsedQuery, PoorNodeType } from '@codeque/core' + export type ParsedQueryWithSettings = { parsedQuery: NotNullParsedQuery mode: Mode @@ -7,6 +8,16 @@ export type ParsedQueryWithSettings = { excludeFiles: string[] includeFiles: string[] | undefined } + +export type RuleOption = { + mode?: Mode + query?: string + message?: string + caseInsensitive?: boolean + includeFiles?: string[] + excludeFiles?: string[] +} + export type SearchFn = (node: PoorNodeType) => void export type VisitorsSearchMap = Record export type VisitorsSearchArrayMap = Record> diff --git a/packages/eslint/src/utils.ts b/packages/eslint/src/utils.ts index 9589f2e..582e9a9 100644 --- a/packages/eslint/src/utils.ts +++ b/packages/eslint/src/utils.ts @@ -1,4 +1,4 @@ -import { ParsedQuery, PoorNodeType } from '@codeque/core' +import { ParsedQuery, ParserType, PoorNodeType } from '@codeque/core' import { SearchFn } from './types' export const formatQueryParseErrors = (queries: [ParsedQuery[], boolean][]) => { @@ -19,12 +19,35 @@ export const createMultipleSearchFunctionsExecutor = } const typescriptEslintParser = '@typescript-eslint/parser' as const +const babelEslintParser = '@babel/eslint-parser' as const +const esprimaParser = 'esprima' as const +const espreeParser = 'espree' as const +const eslintParser = 'eslint' as const // in fact it's espree -type SupportedParsers = typeof typescriptEslintParser -export const supportedParsers = [typescriptEslintParser] +type SupportedParsers = + | typeof typescriptEslintParser + | typeof babelEslintParser + | typeof esprimaParser + | typeof espreeParser + | typeof eslintParser -export const parserNamesMappingsToCodeQueInternal = { - [typescriptEslintParser]: 'typescript-eslint', +export const supportedParsers = [ + typescriptEslintParser, + babelEslintParser, + esprimaParser, + espreeParser, + eslintParser, +] + +export const parserNamesMappingsToCodeQueInternal: Record< + SupportedParsers, + ParserType +> = { + [typescriptEslintParser]: 'typescript-eslint-parser', + [babelEslintParser]: 'babel-eslint-parser', + [esprimaParser]: 'esprima', + [espreeParser]: 'espree', + [eslintParser]: 'espree', } as const export const extractParserNameFromResolvedPath = (pathToParser: string) => { @@ -48,7 +71,7 @@ export const assertCompatibleParser = (parserPath: string) => { if (!supportedParsers.includes(parser as any)) { throw new Error( - `\nCodeQue does not support "${parser}" parser.\nSupported parsers are:\n -${supportedParsers.join( + `\nCodeQue does not support "${parser}" parser.\nSupported parsers are:\n- ${supportedParsers.join( '\n- ', )}\nPlease open an issue to request parser support.\nVisit https://github.com/codeque-co/codeque/issues\n`, ) diff --git a/packages/eslint/tsconfig.json b/packages/eslint/tsconfig.json index 58de4f4..6560fa6 100644 --- a/packages/eslint/tsconfig.json +++ b/packages/eslint/tsconfig.json @@ -3,20 +3,12 @@ "compilerOptions": { "baseUrl": "./src", "paths": { - "/*": [ - "src/*" - ] + "/*": ["src/*"] }, "outDir": "dist", "skipLibCheck": true, "declaration": false }, - "include": ["src"], - "exclude": [ - "__tests__/**/__fixtures__", - "__tests__/**/__fixturesOther__", - "dist", - "node_modules", - "tools/*.js" - ] -} \ No newline at end of file + "include": ["src", "declarations.d.ts"], + "exclude": ["dist", "node_modules", "tools/*.js", "jest/**", "jest.config.js"] +} diff --git a/packages/vscode/declarations.d.ts b/packages/vscode/declarations.d.ts new file mode 100644 index 0000000..b8b4571 --- /dev/null +++ b/packages/vscode/declarations.d.ts @@ -0,0 +1,2 @@ +declare module '@babel/eslint-parser' +declare module 'espree' diff --git a/packages/vscode/package.json b/packages/vscode/package.json index e486911..09d8ac6 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -135,9 +135,8 @@ "package": "yarn package:extension && yarn package:webviews", "compile-tests": "tsc -p . --outDir out", "watch-tests": "tsc -p . -w --outDir out", - "pretest": "yarn run compile-tests && yarn run compile && yarn run lint", "lint": "eslint src --ext ts", - "test": "node ./out/test/runTest.js", + "test": "echo 0", "typecheck": "tsc --project tsconfig.json --noEmit" }, "devDependencies": { diff --git a/packages/vscode/tsconfig.json b/packages/vscode/tsconfig.json index 8ab50d9..0508029 100644 --- a/packages/vscode/tsconfig.json +++ b/packages/vscode/tsconfig.json @@ -6,11 +6,5 @@ "declaration": false, "jsx": "react-jsx" }, - "exclude": [ - "dist", - "dist-webviews", - "node_modules", - "media", - "webpack.*" - ] -} \ No newline at end of file + "exclude": ["dist", "dist-webviews", "node_modules", "media", "webpack.*"] +} diff --git a/packages/vscode/webpack.extension.config.js b/packages/vscode/webpack.extension.config.js index 80cb0f8..9d96e2b 100644 --- a/packages/vscode/webpack.extension.config.js +++ b/packages/vscode/webpack.extension.config.js @@ -44,6 +44,9 @@ module.exports = (env, argv) => { alias: { // Avoid trying to bundle typescript-eslint/parser which is used by core, but not vscode '@typescript-eslint': false, + espree: false, + esprima: false, + '@babel/eslint-parser': false, }, }, module: { diff --git a/packages/vscode/webpack.webviews.config.js b/packages/vscode/webpack.webviews.config.js index c9623d0..346857c 100644 --- a/packages/vscode/webpack.webviews.config.js +++ b/packages/vscode/webpack.webviews.config.js @@ -23,7 +23,9 @@ module.exports = { alias: { // Avoid trying to bundle typescript-eslint/parser which is used by core, but not vscode '@typescript-eslint': false, + espree: false, esprima: false, + '@babel/eslint-parser': false, }, }, output: { diff --git a/tsconfig.json b/tsconfig.json index e6f9438..d4d8528 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,5 +7,8 @@ "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true - } + }, + "exclude": [ + "**/*.js" + ] } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 755364b..7ff84e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -72,6 +72,15 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/eslint-parser@^7.21.8": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.21.8.tgz#59fb6fc4f3b017ab86987c076226ceef7b2b2ef2" + integrity sha512-HLhI+2q+BP3sf78mFUZNCGc10KEmoUqtUT1OCdMZsN+qr4qFeLUod62/zAnF3jNQstwyasDkZnVXwfK2Bml7MQ== + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + "@babel/generator@^7.16.0", "@babel/generator@^7.7.2": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" @@ -81,6 +90,16 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== + dependencies: + "@babel/types" "^7.21.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" @@ -1058,6 +1077,15 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" +"@babel/types@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1985,6 +2013,13 @@ "@types/node" "*" jest-mock "^27.4.2" +"@jest/expect-utils@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" + integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== + dependencies: + jest-get-type "^29.4.3" + "@jest/fake-timers@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.2.tgz#d217f86c3ba2027bf29e0b731fd0cb761a72d093" @@ -2037,6 +2072,13 @@ terminal-link "^2.0.0" v8-to-istanbul "^8.1.0" +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + "@jest/source-map@^27.4.0": version "27.4.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.4.0.tgz#2f0385d0d884fb3e2554e8f71f8fa957af9a74b6" @@ -2098,6 +2140,18 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -2107,7 +2161,16 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -2125,11 +2188,19 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/trace-mapping@^0.3.17": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": version "0.3.14" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" @@ -2196,6 +2267,13 @@ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2332,6 +2410,11 @@ conventional-changelog "^3.1.25" conventional-recommended-bump "^6.1.0" +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -2524,6 +2607,14 @@ jest-diff "^27.0.0" pretty-format "^27.0.0" +"@types/jest@^29.4.0": + version "29.4.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.0.tgz#a8444ad1704493e84dbf07bb05990b275b3b9206" + integrity sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + "@types/json-buffer@~3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64" @@ -2703,7 +2794,7 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^17.0.19": +"@types/yargs@^17.0.19", "@types/yargs@^17.0.8": version "17.0.22" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== @@ -2782,6 +2873,16 @@ "@typescript-eslint/typescript-estree" "5.50.0" debug "^4.3.4" +"@typescript-eslint/parser@^5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.53.0.tgz#a1f2b9ae73b83181098747e96683f1b249ecab52" + integrity sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ== + dependencies: + "@typescript-eslint/scope-manager" "5.53.0" + "@typescript-eslint/types" "5.53.0" + "@typescript-eslint/typescript-estree" "5.53.0" + debug "^4.3.4" + "@typescript-eslint/scope-manager@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" @@ -2814,6 +2915,14 @@ "@typescript-eslint/types" "5.50.0" "@typescript-eslint/visitor-keys" "5.50.0" +"@typescript-eslint/scope-manager@5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz#42b54f280e33c82939275a42649701024f3fafef" + integrity sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w== + dependencies: + "@typescript-eslint/types" "5.53.0" + "@typescript-eslint/visitor-keys" "5.53.0" + "@typescript-eslint/type-utils@5.16.0": version "5.16.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz#b482bdde1d7d7c0c7080f7f2f67ea9580b9e0692" @@ -2852,6 +2961,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.50.0.tgz#c461d3671a6bec6c2f41f38ed60bd87aa8a30093" integrity sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w== +"@typescript-eslint/types@5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.53.0.tgz#f79eca62b97e518ee124086a21a24f3be267026f" + integrity sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A== + "@typescript-eslint/typescript-estree@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" @@ -2904,6 +3018,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz#bc651dc28cf18ab248ecd18a4c886c744aebd690" + integrity sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w== + dependencies: + "@typescript-eslint/types" "5.53.0" + "@typescript-eslint/visitor-keys" "5.53.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.16.0": version "5.16.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.16.0.tgz#42218b459d6d66418a4eb199a382bdc261650679" @@ -2960,6 +3087,14 @@ "@typescript-eslint/types" "5.50.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz#8a5126623937cdd909c30d8fa72f79fa56cc1a9f" + integrity sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w== + dependencies: + "@typescript-eslint/types" "5.53.0" + eslint-visitor-keys "^3.3.0" + "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" @@ -4469,6 +4604,11 @@ diff-sequences@^27.4.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== +diff-sequences@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" + integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== + diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -4777,7 +4917,7 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint-visitor-keys@^2.0.0: +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== @@ -4787,6 +4927,11 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + eslint@^7.11.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" @@ -4946,6 +5091,15 @@ espree@^9.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" +espree@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -5032,6 +5186,17 @@ expect@^27.4.2: jest-message-util "^27.4.2" jest-regex-util "^27.4.0" +expect@^29.0.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" + integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== + dependencies: + "@jest/expect-utils" "^29.5.0" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -6374,6 +6539,16 @@ jest-diff@^27.0.0, jest-diff@^27.4.2: jest-get-type "^27.4.0" pretty-format "^27.4.2" +jest-diff@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" + integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.4.3" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + jest-docblock@^27.4.0: version "27.4.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.4.0.tgz#06c78035ca93cbbb84faf8fce64deae79a59f69f" @@ -6422,6 +6597,11 @@ jest-get-type@^27.4.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== +jest-get-type@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" + integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== + jest-haste-map@^27.4.4: version "27.4.4" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.4.tgz#ec6013845368a155372e25e42e2b77e6ecc5019f" @@ -6484,6 +6664,16 @@ jest-matcher-utils@^27.4.2: jest-get-type "^27.4.0" pretty-format "^27.4.2" +jest-matcher-utils@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" + integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== + dependencies: + chalk "^4.0.0" + jest-diff "^29.5.0" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + jest-message-util@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.2.tgz#07f3f1bf207d69cf798ce830cc57f1a849f99388" @@ -6499,6 +6689,21 @@ jest-message-util@^27.4.2: slash "^3.0.0" stack-utils "^2.0.3" +jest-message-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" + integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.5.0" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.5.0" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.2.tgz#184ff197a25491bfe4570c286daa5d62eb760b88" @@ -6652,6 +6857,18 @@ jest-util@^27.0.0, jest-util@^27.4.2: graceful-fs "^4.2.4" picomatch "^2.2.3" +jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.2.tgz#eecfcc1b1c9429aa007da08a2bae4e32a81bbbc3" @@ -7787,6 +8004,15 @@ pretty-format@^27.0.0, pretty-format@^27.4.2: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^29.0.0, pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== + dependencies: + "@jest/schemas" "^29.4.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + prism-react-renderer@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" @@ -7996,6 +8222,11 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-remove-scroll-bar@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.3.tgz#e291f71b1bb30f5f67f023765b7435f4b2b2cd94" From 9bb37d09a6b2a17eadcd034cd311d3dca42a907b Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Thu, 2 Mar 2023 22:08:20 +0100 Subject: [PATCH 007/110] feat(core): add html support --- .../HTML/matchCodePatterns/all.test.ts | 115 ++++++++++ packages/core/declarations.d.ts | 1 + packages/core/jest.config.js | 11 + .../angular-eslint-template-parser.setup.ts | 4 + packages/core/package.json | 2 + packages/core/src/parseQuery.ts | 11 +- .../angularEslintTemplateParser/common.ts | 19 ++ .../angularEslintTemplateParser/settings.ts | 204 ++++++++++++++++++ packages/core/src/parserSettings/index.ts | 3 + packages/core/src/types.ts | 3 + yarn.lock | 21 ++ 11 files changed, 391 insertions(+), 3 deletions(-) create mode 100644 packages/core/__tests__/HTML/matchCodePatterns/all.test.ts create mode 100644 packages/core/jest/angular-eslint-template-parser.setup.ts create mode 100644 packages/core/src/parserSettings/angularEslintTemplateParser/common.ts create mode 100644 packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts diff --git a/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts b/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts new file mode 100644 index 0000000..6b1c826 --- /dev/null +++ b/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts @@ -0,0 +1,115 @@ +import { searchInStrings } from '../../../src/searchInStrings' + +describe('Basic queries', () => { + const fileContent = ` +
+
+

Some text

+
+
+ +
+
+
+

Some other text

+ ` + + it('Should match paragraph node', () => { + const queries = [`

`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) + + it('Should match div node with some params', () => { + const queries = [ + `
`, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match div with text node', () => { + const queries = [`

Some text

`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should not match img if params does not match', () => { + const queries = [``] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Should match div node with p node using wildcard', () => { + const queries = [`<$$>

Some text

`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) +}) diff --git a/packages/core/declarations.d.ts b/packages/core/declarations.d.ts index b8b4571..2df47c9 100644 --- a/packages/core/declarations.d.ts +++ b/packages/core/declarations.d.ts @@ -1,2 +1,3 @@ declare module '@babel/eslint-parser' declare module 'espree' +declare module '@angular-eslint/template-parser' diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js index 23e4704..705fc74 100644 --- a/packages/core/jest.config.js +++ b/packages/core/jest.config.js @@ -15,6 +15,8 @@ const typeScriptParserTestFiles = [ '/__tests__/TypeScript/**/*.test.ts', ] +const htmlParserTestFiles = ['/__tests__/HTML/**/*.test.ts'] + module.exports = { testPathIgnorePatterns: [ '__fixtures__', @@ -132,5 +134,14 @@ module.exports = { '/jest/espree:traversal.setup.ts', ], }, + { + ...sharedConfig, + displayName: { name: 'angular-eslint-template-parser', color: 'orange' }, + testMatch: htmlParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/angular-eslint-template-parser.setup.ts', + ], + }, ], } diff --git a/packages/core/jest/angular-eslint-template-parser.setup.ts b/packages/core/jest/angular-eslint-template-parser.setup.ts new file mode 100644 index 0000000..518c002 --- /dev/null +++ b/packages/core/jest/angular-eslint-template-parser.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'angular-eslint-template-parser', + isTraversal: false, +} diff --git a/packages/core/package.json b/packages/core/package.json index ffe8c88..5706a49 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -28,6 +28,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.21.8", "@babel/generator": "^7.21.4", + "@angular-eslint/template-parser": "^15.2.1", "@types/dedent": "^0.7.0", "@types/esprima": "^4.0.3", "@types/glob": "^7.2.0", @@ -84,6 +85,7 @@ "test:esprima:traversal": "jest --selectProjects=esprima:traversal", "test:espree": "jest --selectProjects=espree", "test:espree:traversal": "jest --selectProjects=espree:traversal", + "test:angular-eslint-template-parser": "jest --selectProjects=angular-eslint-template-parser", "test:circular": "dpdm --exit-code circular:1 --tree=false --warning=false './src/**'", "test:setup": "node ./tools/getFixtures.js", "lint": "eslint --ext .js,.ts src", diff --git a/packages/core/src/parseQuery.ts b/packages/core/src/parseQuery.ts index a3734db..4718a00 100644 --- a/packages/core/src/parseQuery.ts +++ b/packages/core/src/parseQuery.ts @@ -205,8 +205,11 @@ export const parseQueries = ( } } + const preprocessedQueryCode = + parserSettings.preprocessQueryCode?.(queryText) ?? queryText + try { - const parsedAsIs = parserSettings.parseCode(queryText) + const parsedAsIs = parserSettings.parseCode(preprocessedQueryCode) const { queryNode, isMultistatement } = extractQueryNode( parsedAsIs, @@ -236,7 +239,7 @@ export const parseQueries = ( try { const parsedAsExp = parserSettings.parseCode( - `(${queryText})`, + `(${preprocessedQueryCode})`, ) as unknown as PoorNodeType const { queryNode } = extractQueryNode(parsedAsExp, parserSettings) @@ -255,7 +258,9 @@ export const parseQueries = ( } }) .map(({ error, queryNode, isMultistatement }) => ({ - queryNode, + queryNode: + (queryNode && parserSettings.postprocessQueryNode?.(queryNode)) ?? + queryNode, error: !queryNode ? { text: 'Empty query!' } : error, isMultistatement, })) diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts new file mode 100644 index 0000000..964670a --- /dev/null +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts @@ -0,0 +1,19 @@ +import { createWildcardUtils } from '../../wildcardUtilsFactory' +import { PoorNodeType } from '../../types' + +export const identifierNodeTypes = ['Element$1'] + +const wildcardChar = '$' +const numericWildcard = '0x0' + +export const getIdentifierNodeName = (node: PoorNodeType) => node.name as string +export const setIdentifierNodeName = (node: PoorNodeType, name: string) => { + node.name = name +} + +export const wildcardUtils = createWildcardUtils( + identifierNodeTypes, + numericWildcard, + wildcardChar, + getIdentifierNodeName, +) diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts new file mode 100644 index 0000000..c58949a --- /dev/null +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts @@ -0,0 +1,204 @@ +import { parseForESLint } from '@angular-eslint/template-parser' +import { + Location, + MatchPosition, + NumericLiteralUtils, + ParserSettings, + PoorNodeType, + ProgramNodeAndBlockNodeUtils, + StringLikeLiteralUtils, +} from '../../types' +import { normalizeText } from '../../utils' +import { + getIdentifierNodeName, + identifierNodeTypes, + setIdentifierNodeName, + wildcardUtils, +} from './common' +import { traverseAst } from '../../searchStages/traverseAndMatch' + +const supportedExtensions = ['html', 'htm'] + +const getProgramNodeFromRootNode = (rootNode: PoorNodeType) => rootNode // root node is program node + +const getProgramBodyFromRootNode = (fileNode: PoorNodeType) => { + return fileNode.templateNodes as PoorNodeType[] +} + +const unwrapExpressionStatement = (node: PoorNodeType) => { + return node as PoorNodeType +} + +const createBlockStatementNode = ( + body: PoorNodeType[], + position: MatchPosition, +) => ({ + type: 'BlockStatement', + body, + directives: [], // whatever it is + ...position, +}) + +const isNode = (maybeNode: PoorNodeType) => { + return typeof maybeNode?.type === 'string' +} + +const isNodeFieldOptional = (nodeType: string, nodeFieldKey: string) => { + return true +} + +const astPropsToSkip = [ + 'range', + 'sourceSpan', + 'startSourceSpan', + 'endSourceSpan', + 'valueSpan', + 'keySpan', + 'loc', + 'start', + 'end', + 'extra', + 'trailingComments', + 'leadingComments', + 'innerComments', + 'comments', + 'tail', // Support for partial matching of template literals +] + +const parseCode = (code: string, filePath = '') => { + return parseForESLint(code, { filePath, range: true, loc: true }) + .ast as PoorNodeType +} + +type NodeValueSanitizers = Record any>> + +const nodeValuesSanitizers: NodeValueSanitizers = { + ['Text$3']: { + value: normalizeText, + }, +} + +const getSanitizedNodeValue = ( + nodeType: string, + valueKey: string, + value: unknown, +) => { + const valueSanitizer = nodeValuesSanitizers?.[nodeType]?.[valueKey] + + if (valueSanitizer) { + return valueSanitizer(value) + } + + return value +} + +const shouldCompareNode = (node: PoorNodeType) => { + if (node.type === 'Text$3') { + const value: string = getSanitizedNodeValue('Text$3', 'value', node.value) + + return value.length > 0 + } + + return true +} + +const getNodeType = (node: PoorNodeType) => node.type as string + +const isIdentifierNode = (node: PoorNodeType) => + identifierNodeTypes.includes(getNodeType(node)) + +const stringLikeLiteralUtils: StringLikeLiteralUtils = { + isStringLikeLiteralNode: (node: PoorNodeType) => node.type === 'Text$3', + getStringLikeLiteralValue: (node: PoorNodeType) => { + return node?.value as string + }, +} + +const numericLiteralUtils: NumericLiteralUtils = { + isNumericLiteralNode: (node: PoorNodeType) => node.type === 'NumericLiteral', + getNumericLiteralValue: (node: PoorNodeType) => + (node.extra as any).raw as string, +} + +const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { + isProgramNode: (node: PoorNodeType) => node.type === 'Program', + isBlockNode: (node: PoorNodeType) => node.type === 'BlockStatement', + programNodeBodyKey: 'templateNodes', + blockNodeBodyKey: 'body', +} + +const getNodePosition: ParserSettings['getNodePosition'] = ( + node: PoorNodeType, +) => ({ + start: (node.sourceSpan as any).start.offset as number, + end: (node.sourceSpan as any).end.offset as number, + loc: node.loc as unknown as Location, +}) + +const getParseErrorLocation = (e: any) => ({ + line: e.loc?.line ?? 0, + column: e.loc?.column ?? 0, +}) + +const alternativeNodeTypes = { + Identifier: identifierNodeTypes, + MemberExpression: ['OptionalMemberExpression'], + OptionalMemberExpression: ['MemberExpression'], + BlockStatement: ['Program'], +} + +/** + * To support wildcards in html we have to + * - encode wildcard, do it in query text before parsing $$ => a_a_$$ + * - decode wildcard, traverse parsed query and: a_a_$$ => $$ + * `$$` is invalid tag name start in all html parsers + */ +const encodedWildcardSequence = 'a_a_$$' + +const preprocessQueryCode = (code: string) => + code.replace(/\$\$/g, encodedWildcardSequence) + +const postprocessQueryNode = (queryNode: PoorNodeType) => { + traverseAst(queryNode, isNode, { + Element$1: (node) => { + if (node.name === encodedWildcardSequence) { + node.name = '$$' + } + }, + }) + + return queryNode +} + +export const angularEslintTemplateParser: ParserSettings = { + supportedExtensions, + parseCode, + isNode, + isIdentifierNode, + astPropsToSkip, + isNodeFieldOptional, + getProgramBodyFromRootNode, + getProgramNodeFromRootNode, + getIdentifierNodeName, + getNodeType, + unwrapExpressionStatement, + createBlockStatementNode, + getSanitizedNodeValue, + identifierNodeTypes, + setIdentifierNodeName, + shouldCompareNode, + wildcardUtils, + compareNodesBeforeWildcardsComparison: () => undefined, + compareNodesAfterWildcardsComparison: () => undefined, + identifierTypeAnnotationFieldName: 'typeAnnotation', + stringLikeLiteralUtils, + numericLiteralUtils, + programNodeAndBlockNodeUtils, + getNodePosition, + getParseErrorLocation, + alternativeNodeTypes, + postprocessQueryNode, + preprocessQueryCode, +} + +export default angularEslintTemplateParser diff --git a/packages/core/src/parserSettings/index.ts b/packages/core/src/parserSettings/index.ts index 36d6acc..00a3507 100644 --- a/packages/core/src/parserSettings/index.ts +++ b/packages/core/src/parserSettings/index.ts @@ -10,4 +10,7 @@ export const parserSettingsMap: Record ParserSettings> = { espree: resolveParserSettings('espreeParser'), esprima: resolveParserSettings('esprimaParser'), 'babel-eslint-parser': resolveParserSettings('babelEslintParser'), + ['angular-eslint-template-parser']: resolveParserSettings( + 'angularEslintTemplateParser', + ), } diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index b515d3d..fbad46e 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -73,6 +73,7 @@ export type ParserType = | 'espree' | 'esprima' | 'babel-eslint-parser' + | 'angular-eslint-template-parser' export type FileSystemSearchArgs = { filePaths: string[] @@ -265,4 +266,6 @@ export type ParserSettings = { * eg. wildcard Identifier matcher should look in JSXIdentifier visitor */ alternativeNodeTypes: Record + preprocessQueryCode?: (code: string) => string + postprocessQueryNode?: (queryNode: PoorNodeType) => PoorNodeType } diff --git a/yarn.lock b/yarn.lock index 7ff84e6..a17bfc3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,19 @@ # yarn lockfile v1 +"@angular-eslint/bundled-angular-compiler@15.2.1": + version "15.2.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-15.2.1.tgz#7c77a4a19942868d844372b5b3b562c0d630de1e" + integrity sha512-LO7Am8eVCr7oh6a0VmKSL7K03CnQEQhFO7Wt/YtbfYOxVjrbwmYLwJn+wZPOT7A02t/BttOD/WXuDrOWtSMQ/Q== + +"@angular-eslint/template-parser@^15.2.1": + version "15.2.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-15.2.1.tgz#dbe4978afdcea81b9d5cac3d672c20de5821dc54" + integrity sha512-ViCi79gC2aKJecmYLkOT+QlT5WMRNXeYz0Dr9Pr8qXzIbY0oAWE7nOT5jkXwQ9oUk+ybtGCWHma5JVJWVJsIog== + dependencies: + "@angular-eslint/bundled-angular-compiler" "15.2.1" + eslint-scope "^7.0.0" + "@babel/cli@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.0.tgz#a729b7a48eb80b49f48a339529fc4129fd7bcef3" @@ -4890,6 +4903,14 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-scope@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" From d92220cd66730a68d7ee3b520186affde418be89 Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Sun, 25 Jun 2023 11:07:08 +0200 Subject: [PATCH 008/110] wip: html in vscode --- .gitignore | 3 +- .../HTML/matchCodePatterns/all.test.ts | 96 +++++++++++ packages/core/src/getFilesList.ts | 2 + packages/core/src/index.ts | 2 + packages/core/src/parseQuery.ts | 5 +- .../beforeWildcardsComparators.ts | 14 ++ .../angularEslintTemplateParser/common.ts | 8 +- .../angularEslintTemplateParser/settings.ts | 50 ++++-- .../beforeWildcardsComparators.ts | 8 - .../babelEslintParser/settings.ts | 2 +- .../Other/matchWildcardsInPropValueNodes.ts | 67 ++++++++ .../core/src/searchStages/compareNodes.ts | 154 +----------------- .../matchStringOrIdentifierAliases.ts | 150 +++++++++++++++++ packages/vscode/declarations.d.ts | 1 + packages/vscode/src/SearchManager.ts | 35 +++- packages/vscode/src/StateManager.ts | 4 + .../components/FileLink.tsx | 6 +- .../components/ResultsMeta.tsx | 96 +++++++---- .../src/webviews/SearchResultsPanel/utils.ts | 9 + .../Sidebar/components/SearchSettings.tsx | 92 +++++++++-- packages/vscode/webpack.webviews.config.js | 1 + 21 files changed, 578 insertions(+), 227 deletions(-) create mode 100644 packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts delete mode 100644 packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts create mode 100644 packages/core/src/parserSettings/nodeComparatorFactories/Other/matchWildcardsInPropValueNodes.ts create mode 100644 packages/core/src/searchStages/matchStringOrIdentifierAliases.ts create mode 100644 packages/vscode/src/webviews/SearchResultsPanel/utils.ts diff --git a/.gitignore b/.gitignore index 34c941c..01a13fb 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ devQuery devFile *.snapshot.json dist -*.temp \ No newline at end of file +*.temp +.vscode/settings.json \ No newline at end of file diff --git a/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts b/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts index 6b1c826..f1c0184 100644 --- a/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts +++ b/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts @@ -109,7 +109,103 @@ describe('Basic queries', () => { ], }) + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match div node with p node using wildcard', () => { + const queries = [`<$$>

Some text

`] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should not match div with children using element wildcard without children in exact mode', () => { + const queries = [`<$$>`] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + expect(errors).toHaveLength(0) expect(matches.length).toBe(0) }) + + it('Should match div with property using string wildcard', () => { + const queries = [`
`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + debug: true, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should not match div with property using string wildcard on non-existing prop', () => { + const queries = [`
`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Should match p with string content using string wildcard', () => { + const queries = [`

$$text

`] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(2) + }) }) diff --git a/packages/core/src/getFilesList.ts b/packages/core/src/getFilesList.ts index 9680fcc..e0eb772 100644 --- a/packages/core/src/getFilesList.ts +++ b/packages/core/src/getFilesList.ts @@ -12,6 +12,8 @@ import escapeGlob from 'glob-escape' import { HardStopFlag } from './types' export const typeScriptFamilyExtensionTester = /\.(js|jsx|ts|tsx|json|mjs|cjs)$/ +export const htmlFamilyExtensionTester = /\.(html|htm)$/ +export const cssExtensionTester = /\.(css)$/ /** * @deprecated use `typeScriptFamilyExtensionTester` instead diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 107df81..a316a49 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -8,6 +8,8 @@ export { filterIncludeExclude, extensionTester, typeScriptFamilyExtensionTester, + htmlFamilyExtensionTester, + cssExtensionTester, pathToPosix, filterExtensions, } from './getFilesList' diff --git a/packages/core/src/parseQuery.ts b/packages/core/src/parseQuery.ts index 4718a00..676f040 100644 --- a/packages/core/src/parseQuery.ts +++ b/packages/core/src/parseQuery.ts @@ -23,12 +23,13 @@ export const getUniqueTokens = ( parserSettings: ParserSettings, tokens: Set = new Set(), ) => { - const { numericLiteralUtils, stringLikeLiteralUtils } = parserSettings + const { numericLiteralUtils, stringLikeLiteralUtils, getIdentifierNodeName } = + parserSettings const { anyStringWildcardRegExp } = parserSettings.wildcardUtils if (parserSettings.isIdentifierNode(queryNode)) { const trimmedWildcards = parserSettings.wildcardUtils - .removeWildcardAliasesFromIdentifierName(queryNode.name as string) + .removeWildcardAliasesFromIdentifierName(getIdentifierNodeName(queryNode)) .split(parserSettings.wildcardUtils.identifierWildcard) trimmedWildcards.forEach((part) => { diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts new file mode 100644 index 0000000..268668d --- /dev/null +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts @@ -0,0 +1,14 @@ +import { NodesComparator } from '../../types' +import { createMatchWildcardsInPropValueNodesComparator } from '../nodeComparatorFactories/Other/matchWildcardsInPropValueNodes' + +const matchWildcardsInPropValueNodesComparator = + createMatchWildcardsInPropValueNodesComparator({ + nodeType: 'TextAttribute', + keysToTraverse: [], + // Order of keys definition does matter for matchContext! In case someone would use the same alias in eg. prop and value + keysWithWildcards: ['name', 'value'], + }) + +export const beforeWildcardsComparators: NodesComparator[] = [ + matchWildcardsInPropValueNodesComparator, +] diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts index 964670a..8a8b44a 100644 --- a/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts @@ -1,7 +1,13 @@ import { createWildcardUtils } from '../../wildcardUtilsFactory' import { PoorNodeType } from '../../types' -export const identifierNodeTypes = ['Element$1'] +/* + * TextAttribute is considered identifier node name only for purpose of shallow match + * It contains both prop and value strings. + * We have custom matcher for TextAttribute node so it will never get compared by generic wildcard utils + */ + +export const identifierNodeTypes = ['Element$1', 'TextAttribute'] const wildcardChar = '$' const numericWildcard = '0x0' diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts index c58949a..1e24c8a 100644 --- a/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts @@ -7,8 +7,9 @@ import { PoorNodeType, ProgramNodeAndBlockNodeUtils, StringLikeLiteralUtils, + NodesComparatorParameters, } from '../../types' -import { normalizeText } from '../../utils' +import { normalizeText, runNodesComparators } from '../../utils' import { getIdentifierNodeName, identifierNodeTypes, @@ -16,6 +17,7 @@ import { wildcardUtils, } from './common' import { traverseAst } from '../../searchStages/traverseAndMatch' +import { beforeWildcardsComparators } from './beforeWildcardsComparators' const supportedExtensions = ['html', 'htm'] @@ -108,7 +110,8 @@ const isIdentifierNode = (node: PoorNodeType) => identifierNodeTypes.includes(getNodeType(node)) const stringLikeLiteralUtils: StringLikeLiteralUtils = { - isStringLikeLiteralNode: (node: PoorNodeType) => node.type === 'Text$3', + isStringLikeLiteralNode: (node: PoorNodeType) => + node.type === 'Text$3' || node.type === 'TextAttribute', getStringLikeLiteralValue: (node: PoorNodeType) => { return node?.value as string }, @@ -142,9 +145,6 @@ const getParseErrorLocation = (e: any) => ({ const alternativeNodeTypes = { Identifier: identifierNodeTypes, - MemberExpression: ['OptionalMemberExpression'], - OptionalMemberExpression: ['MemberExpression'], - BlockStatement: ['Program'], } /** @@ -153,16 +153,38 @@ const alternativeNodeTypes = { * - decode wildcard, traverse parsed query and: a_a_$$ => $$ * `$$` is invalid tag name start in all html parsers */ -const encodedWildcardSequence = 'a_a_$$' +const encodedWildcardSequence = 'a_$$_x' -const preprocessQueryCode = (code: string) => - code.replace(/\$\$/g, encodedWildcardSequence) +const preprocessQueryCode = (code: string) => { + const queryCode = code.replace(/(\$\$)/g, () => encodedWildcardSequence) + + return queryCode +} + +const replaceEncodedWildcards = (value: string) => + value.replace(/a_\$\$_x/g, () => '$$') const postprocessQueryNode = (queryNode: PoorNodeType) => { traverseAst(queryNode, isNode, { Element$1: (node) => { - if (node.name === encodedWildcardSequence) { - node.name = '$$' + const nodeName = node.name as string + + if (nodeName.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(nodeName) + } + }, + TextAttribute: (node) => { + const nodeValue = node.value as string + + if (nodeValue.includes(encodedWildcardSequence)) { + node.value = replaceEncodedWildcards(nodeValue) + } + }, + Text$3: (node) => { + const nodeValue = node.value as string + + if (nodeValue.includes(encodedWildcardSequence)) { + node.value = replaceEncodedWildcards(nodeValue) } }, }) @@ -170,6 +192,12 @@ const postprocessQueryNode = (queryNode: PoorNodeType) => { return queryNode } +const compareNodesBeforeWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(beforeWildcardsComparators, nodeComparatorParams) +} + export const angularEslintTemplateParser: ParserSettings = { supportedExtensions, parseCode, @@ -188,7 +216,7 @@ export const angularEslintTemplateParser: ParserSettings = { setIdentifierNodeName, shouldCompareNode, wildcardUtils, - compareNodesBeforeWildcardsComparison: () => undefined, + compareNodesBeforeWildcardsComparison, compareNodesAfterWildcardsComparison: () => undefined, identifierTypeAnnotationFieldName: 'typeAnnotation', stringLikeLiteralUtils, diff --git a/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts deleted file mode 100644 index 7c6c68d..0000000 --- a/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { NodesComparator } from '../../types' -import { wildcardForTypeKeywordsNodesComparator } from './nodeComparators/wildcardForTypeKeywords' -import { wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator } from './nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues' - -export const beforeWildcardsComparators: NodesComparator[] = [ - wildcardForTypeKeywordsNodesComparator, - wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator, -] diff --git a/packages/core/src/parserSettings/babelEslintParser/settings.ts b/packages/core/src/parserSettings/babelEslintParser/settings.ts index bad4f0a..7a24791 100644 --- a/packages/core/src/parserSettings/babelEslintParser/settings.ts +++ b/packages/core/src/parserSettings/babelEslintParser/settings.ts @@ -22,7 +22,7 @@ import { import { normalizeText, runNodesComparators } from '../../utils' import { afterWildcardsComparators } from './afterWildcardsComparators' -import { beforeWildcardsComparators } from './beforeWildcardsComparators' +import { beforeWildcardsComparators } from '../angularEslintTemplateParser/beforeWildcardsComparators' const parseCode = (code: string, filePath = '') => { const maybeWrappedJSON = /\.json$/.test(filePath) ? `(${code})` : code diff --git a/packages/core/src/parserSettings/nodeComparatorFactories/Other/matchWildcardsInPropValueNodes.ts b/packages/core/src/parserSettings/nodeComparatorFactories/Other/matchWildcardsInPropValueNodes.ts new file mode 100644 index 0000000..58d2c72 --- /dev/null +++ b/packages/core/src/parserSettings/nodeComparatorFactories/Other/matchWildcardsInPropValueNodes.ts @@ -0,0 +1,67 @@ +import { NodesComparator } from '../../../types' +import { matchStringOrIdentifierAliases } from '../../../searchStages/matchStringOrIdentifierAliases' + +type Settings = { + nodeType: string + keysWithWildcards: string[] + keysToTraverse: string[] +} +/* + * Supports matching string or identifier wildcards in nodes that contains prop and value in the same node. + * eg. TextAttribute in HTML which is { prop: 'propName', value: 'value', ...otherKeys } + */ +export const createMatchWildcardsInPropValueNodesComparator = + ({ + nodeType, + keysWithWildcards, + keysToTraverse, + }: Settings): NodesComparator => + ( + { queryNode, fileNode, searchSettings, matchContext }, + _, + { fileKeysToTraverseForOtherMatches }, + ) => { + if (queryNode?.type === nodeType && fileNode?.type === nodeType) { + const { wildcardUtils } = searchSettings.parserSettings + const { caseInsensitive } = searchSettings + + let levelMatch = true + + keysWithWildcards.forEach((key) => { + const queryNodeStringContent = queryNode[key] as string + + const fileNodeStringContent = fileNode[key] as string + + const wildcardsMeta = wildcardUtils.getStringWildcardsFromString( + queryNodeStringContent, + ) + + if (wildcardsMeta.length > 0) { + levelMatch = + levelMatch && + matchStringOrIdentifierAliases({ + queryValue: queryNodeStringContent, + fileValue: fileNodeStringContent, + wildcardsMeta, + matchContext, + wildcardUtils, + caseInsensitive, + }) + } else { + /** + * If there are no wildcards in given prop, compare prop values directly + */ + levelMatch = + levelMatch && queryNodeStringContent === fileNodeStringContent + } + }) + + // We always want to return here, otherwise generic string wildcard matching would take over and match incorrectly + return { + levelMatch, + queryKeysToTraverseForValidatingMatch: keysToTraverse, + fileKeysToTraverseForValidatingMatch: keysToTraverse, + fileKeysToTraverseForOtherMatches, + } + } + } diff --git a/packages/core/src/searchStages/compareNodes.ts b/packages/core/src/searchStages/compareNodes.ts index 01edcd9..db2d5b2 100644 --- a/packages/core/src/searchStages/compareNodes.ts +++ b/packages/core/src/searchStages/compareNodes.ts @@ -5,166 +5,16 @@ import { isNodeArray, } from '../astUtils' import { - PoorNodeType, CompareNodesParams, CompareNodesReturnType, - WildcardUtils, - ParserSettings, - WildcardMeta, + PoorNodeType, } from '../types' import { measureStart, regExpTest } from '../utils' -import { MatchContext } from '../matchContext' +import { matchStringOrIdentifierAliases } from './matchStringOrIdentifierAliases' const keyWithPrefix = (prefix: string) => (key: string) => prefix ? `${prefix}.${key}` : key -const matchStringOrIdentifierAliases = ({ - queryValue, - fileValue, - matchContext, - wildcardsMeta, - wildcardUtils, - caseInsensitive, -}: { - queryValue: string - fileValue: string - wildcardsMeta: WildcardMeta[] - matchContext: MatchContext - wildcardUtils: WildcardUtils - caseInsensitive: boolean -}): boolean => { - const { patternToRegExp, removeWildcardAliasesFromIdentifierName } = - wildcardUtils - - const identifierNameWithWildcardsWithoutAliases = - removeWildcardAliasesFromIdentifierName(queryValue) - const regex = patternToRegExp( - identifierNameWithWildcardsWithoutAliases, - caseInsensitive, - ) - /** - * Check initial match of wildcards pattern - */ - - const wildcardMatch = regExpTest(regex, fileValue) - - let levelMatch = wildcardMatch - - if (wildcardMatch && wildcardsMeta.length > 0) { - /** - * If there are aliased wildcards, look for aliased values and match or assign new values - */ - const queryNodeIdentifierNameWithWildcard = queryValue - - const fileNodeIdentifierName = fileValue - - /** - * Creates named capturing group for alias, where alias is group name - */ - const createAliasedIdentifierWildcardRegExp = (alias: string) => - `(?<${alias}>(\\w|-)*)` - - const createAliasedStringWildcardRegExp = (alias: string) => - `(?<${alias}>(.)*)` - - const identifierWildcardRegExp = '(\\w|-)*' - const stringWildcardRegExp = '(.)*' - - /** - * Compose regex that represents identifier name with aliased and non aliased wildcards - */ - let wildcardValuesExtractionRegexText = queryNodeIdentifierNameWithWildcard - - wildcardsMeta.forEach( - ({ wildcardAlias, wildcardWithAlias, wildcardType }) => { - let regExpPart = identifierWildcardRegExp - - if (wildcardType === 'identifier' && wildcardAlias) { - regExpPart = createAliasedIdentifierWildcardRegExp(wildcardAlias) - } else if (wildcardType === 'string' && !wildcardAlias) { - regExpPart = stringWildcardRegExp - } else if (wildcardType === 'string' && wildcardAlias) { - regExpPart = createAliasedStringWildcardRegExp(wildcardAlias) - } - - wildcardValuesExtractionRegexText = - wildcardValuesExtractionRegexText.replace( - wildcardWithAlias, - regExpPart, - ) - }, - ) - - const wildcardValuesExtractionRegex = new RegExp( - wildcardValuesExtractionRegexText, - caseInsensitive ? 'i' : undefined, - ) - - /** - * Match file node content with wildcards regexp, so we can extract aliases values later - */ - const wildcardValuesExtractionMatch = fileNodeIdentifierName.match( - wildcardValuesExtractionRegex, - ) - - if (wildcardValuesExtractionMatch === null) { - console.log( - 'wildcardValuesExtractionRegex', - wildcardValuesExtractionRegex, - ) - - console.log('fileNodeIdentifierName', fileNodeIdentifierName) - throw new Error( - 'Wildcard alias extraction RegExp did not match, thus it was build incorrectly.', - ) - } - - /** - * Compare wildcard aliases with values extracted from file node - * - If alias value exist in match context, compare with value from file node - * - If alias value does not exist, add it's value to match context - */ - wildcardsMeta.forEach((wildcardMeta) => { - const { wildcardAlias, wildcardWithAlias, wildcardType } = wildcardMeta - - if (wildcardAlias !== null) { - const existingAlias = wildcardAlias - ? matchContext.getIdentifierAlias(wildcardAlias) || - matchContext.getStringAlias(wildcardAlias) - : null - - const aliasValue = - wildcardValuesExtractionMatch?.groups?.[wildcardAlias] ?? '' - - if (existingAlias !== null) { - const aliasMatches = caseInsensitive - ? existingAlias.aliasValue.toLocaleLowerCase() === - aliasValue.toLocaleLowerCase() - : existingAlias.aliasValue === aliasValue - - levelMatch = levelMatch && aliasMatches - } else { - if (wildcardType === 'identifier') { - matchContext.addIdentifierAlias({ - alias: wildcardAlias, - wildcard: wildcardWithAlias, - aliasValue: aliasValue, - }) - } else if (wildcardType === 'string') { - matchContext.addStringAlias({ - alias: wildcardAlias, - wildcard: wildcardWithAlias, - aliasValue: aliasValue, - }) - } - } - } - }) - } - - return levelMatch -} - export const compareNodes = ( compareParams: CompareNodesParams, ): CompareNodesReturnType => { diff --git a/packages/core/src/searchStages/matchStringOrIdentifierAliases.ts b/packages/core/src/searchStages/matchStringOrIdentifierAliases.ts new file mode 100644 index 0000000..e7b28bb --- /dev/null +++ b/packages/core/src/searchStages/matchStringOrIdentifierAliases.ts @@ -0,0 +1,150 @@ +import { WildcardUtils, WildcardMeta } from '../types' +import { regExpTest } from '../utils' +import { MatchContext } from '../matchContext' + +export const matchStringOrIdentifierAliases = ({ + queryValue, + fileValue, + matchContext, + wildcardsMeta, + wildcardUtils, + caseInsensitive, +}: { + queryValue: string + fileValue: string + wildcardsMeta: WildcardMeta[] + matchContext: MatchContext + wildcardUtils: WildcardUtils + caseInsensitive: boolean +}): boolean => { + const { patternToRegExp, removeWildcardAliasesFromIdentifierName } = + wildcardUtils + + const identifierNameWithWildcardsWithoutAliases = + removeWildcardAliasesFromIdentifierName(queryValue) + const regex = patternToRegExp( + identifierNameWithWildcardsWithoutAliases, + caseInsensitive, + ) + /** + * Check initial match of wildcards pattern + */ + + const wildcardMatch = regExpTest(regex, fileValue) + + let levelMatch = wildcardMatch + + if (wildcardMatch && wildcardsMeta.length > 0) { + /** + * If there are aliased wildcards, look for aliased values and match or assign new values + */ + const queryNodeIdentifierNameWithWildcard = queryValue + + const fileNodeIdentifierName = fileValue + + /** + * Creates named capturing group for alias, where alias is group name + */ + const createAliasedIdentifierWildcardRegExp = (alias: string) => + `(?<${alias}>(\\w|-)*)` + + const createAliasedStringWildcardRegExp = (alias: string) => + `(?<${alias}>(.)*)` + + const identifierWildcardRegExp = '(\\w|-)*' + const stringWildcardRegExp = '(.)*' + + /** + * Compose regex that represents identifier name with aliased and non aliased wildcards + */ + let wildcardValuesExtractionRegexText = queryNodeIdentifierNameWithWildcard + + wildcardsMeta.forEach( + ({ wildcardAlias, wildcardWithAlias, wildcardType }) => { + let regExpPart = identifierWildcardRegExp + + if (wildcardType === 'identifier' && wildcardAlias) { + regExpPart = createAliasedIdentifierWildcardRegExp(wildcardAlias) + } else if (wildcardType === 'string' && !wildcardAlias) { + regExpPart = stringWildcardRegExp + } else if (wildcardType === 'string' && wildcardAlias) { + regExpPart = createAliasedStringWildcardRegExp(wildcardAlias) + } + + wildcardValuesExtractionRegexText = + wildcardValuesExtractionRegexText.replace( + wildcardWithAlias, + regExpPart, + ) + }, + ) + + const wildcardValuesExtractionRegex = new RegExp( + wildcardValuesExtractionRegexText, + caseInsensitive ? 'i' : undefined, + ) + + /** + * Match file node content with wildcards regexp, so we can extract aliases values later + */ + const wildcardValuesExtractionMatch = fileNodeIdentifierName.match( + wildcardValuesExtractionRegex, + ) + + if (wildcardValuesExtractionMatch === null) { + console.log( + 'wildcardValuesExtractionRegex', + wildcardValuesExtractionRegex, + ) + + console.log('fileNodeIdentifierName', fileNodeIdentifierName) + throw new Error( + 'Wildcard alias extraction RegExp did not match, thus it was build incorrectly.', + ) + } + + /** + * Compare wildcard aliases with values extracted from file node + * - If alias value exist in match context, compare with value from file node + * - If alias value does not exist, add it's value to match context + */ + wildcardsMeta.forEach((wildcardMeta) => { + const { wildcardAlias, wildcardWithAlias, wildcardType } = wildcardMeta + + if (wildcardAlias !== null) { + const existingAlias = wildcardAlias + ? matchContext.getIdentifierAlias(wildcardAlias) || + matchContext.getStringAlias(wildcardAlias) + : null + + const aliasValue = + wildcardValuesExtractionMatch?.groups?.[wildcardAlias] ?? '' + + if (existingAlias !== null) { + const aliasMatches = caseInsensitive + ? existingAlias.aliasValue.toLocaleLowerCase() === + aliasValue.toLocaleLowerCase() + : existingAlias.aliasValue === aliasValue + + levelMatch = levelMatch && aliasMatches + } else { + if (wildcardType === 'identifier') { + matchContext.addIdentifierAlias({ + alias: wildcardAlias, + wildcard: wildcardWithAlias, + aliasValue: aliasValue, + }) + } else if (wildcardType === 'string') { + matchContext.addStringAlias({ + alias: wildcardAlias, + wildcard: wildcardWithAlias, + aliasValue: aliasValue, + }) + } + } + } + }) + } + + return levelMatch +} diff --git a/packages/vscode/declarations.d.ts b/packages/vscode/declarations.d.ts index b8b4571..2df47c9 100644 --- a/packages/vscode/declarations.d.ts +++ b/packages/vscode/declarations.d.ts @@ -1,2 +1,3 @@ declare module '@babel/eslint-parser' declare module 'espree' +declare module '@angular-eslint/template-parser' diff --git a/packages/vscode/src/SearchManager.ts b/packages/vscode/src/SearchManager.ts index 287ba56..1a25279 100644 --- a/packages/vscode/src/SearchManager.ts +++ b/packages/vscode/src/SearchManager.ts @@ -9,13 +9,17 @@ import { filterIncludeExclude, SearchInFileError, typeScriptFamilyExtensionTester, + cssExtensionTester, + htmlFamilyExtensionTester, filterExtensions, + ParserType, + __internal, } from '@codeque/core' import { sanitizeFsPath } from './nodeUtils' import path from 'path' import * as vscode from 'vscode' import { eventBusInstance } from './EventBus' -import { StateManager, StateShape } from './StateManager' +import { StateManager, StateShape, SearchFileType } from './StateManager' import { simpleDebounce } from './utils' type FilesLists = { @@ -25,6 +29,18 @@ type FilesLists = { type Root = { path: string; name?: string } +const extensionTesterMap: Record = { + all: /\.(.)+$/, + html: htmlFamilyExtensionTester, + 'js-ts-json': typeScriptFamilyExtensionTester, +} + +const parserNameMap: Record = { + all: 'babel', // it does not matter, just need value for happy TS + html: 'angular-eslint-template-parser', + 'js-ts-json': 'babel', +} + export class SearchManager { private isWorkspace: boolean | undefined private roots: Root[] | undefined @@ -401,16 +417,21 @@ export class SearchManager { } } - const finalFilesList = - settings.mode === 'text' - ? files - : filterExtensions(files, typeScriptFamilyExtensionTester) + const extensionTester = extensionTesterMap[settings.fileType] + + const filesListFilteredByExtension = filterExtensions( + files, + extensionTester, + ) + + const parser = parserNameMap[settings.fileType] // We start search in next tick so not block events delivery and UI update setTimeout( (async () => { const results = await searchMultiThread({ - filePaths: finalFilesList, + parser, + filePaths: filesListFilteredByExtension, queryCodes: [settings.query], mode: settings.mode, caseInsensitive: settings.caseType === 'insensitive', @@ -427,7 +448,7 @@ export class SearchManager { isWorkspace, ), time: (searchEnd - searchStart) / 1000, - files: finalFilesList, + files: filesListFilteredByExtension, isWorkspace, }) diff --git a/packages/vscode/src/StateManager.ts b/packages/vscode/src/StateManager.ts index d866232..1655500 100644 --- a/packages/vscode/src/StateManager.ts +++ b/packages/vscode/src/StateManager.ts @@ -3,7 +3,10 @@ import { CaseType } from 'types' import * as vscode from 'vscode' import { eventBusInstance } from './EventBus' +export type SearchFileType = 'all' | 'js-ts-json' | 'html' + export type StateShape = { + fileType: SearchFileType mode: Mode caseType: CaseType query: string @@ -18,6 +21,7 @@ export type StateShape = { export class StateManager { private readonly defaultState: StateShape = { + fileType: 'js-ts-json', mode: 'include', caseType: 'insensitive', query: '', diff --git a/packages/vscode/src/webviews/SearchResultsPanel/components/FileLink.tsx b/packages/vscode/src/webviews/SearchResultsPanel/components/FileLink.tsx index 79b17bf..7db0e4c 100644 --- a/packages/vscode/src/webviews/SearchResultsPanel/components/FileLink.tsx +++ b/packages/vscode/src/webviews/SearchResultsPanel/components/FileLink.tsx @@ -1,6 +1,6 @@ import { Link, LinkProps, Text } from '@chakra-ui/react' import { Match, MatchWithFileInfo } from '@codeque/core' -import { eventBusInstance } from '../../../EventBus' +import { openFile } from '../utils' type FileLinkProps = LinkProps & { match: { @@ -21,10 +21,6 @@ export function FileLink({ onClick, ...rest }: FileLinkProps) { - const openFile = (data: { filePath: string; location?: Match['loc'] }) => { - eventBusInstance.dispatch('open-file', data) - } - const filePathStartsWithDot = relativeFilePath?.startsWith('.') const displayRelativePath = filePathStartsWithDot diff --git a/packages/vscode/src/webviews/SearchResultsPanel/components/ResultsMeta.tsx b/packages/vscode/src/webviews/SearchResultsPanel/components/ResultsMeta.tsx index e6339ea..93d0109 100644 --- a/packages/vscode/src/webviews/SearchResultsPanel/components/ResultsMeta.tsx +++ b/packages/vscode/src/webviews/SearchResultsPanel/components/ResultsMeta.tsx @@ -14,6 +14,7 @@ import { SearchInFileError, SearchResults } from '@codeque/core' import { IoMdInformationCircleOutline } from 'react-icons/io' import { useThemeType } from '../../components/useThemeType' import { darkTheme, lightTheme } from '../../components/codeHighlightThemes' +import { openFile } from '../utils' type ResultsMetaProps = { time: number | string | undefined @@ -29,6 +30,29 @@ type ResultsMetaProps = { const noValue = 'n/a' +const extractLocationFormErrorText = (errorText: string) => { + const matcher = /\((\d)+(,|:|;)(\d)+\)/g + + const locationStringMatch = errorText.match(matcher) + + if (locationStringMatch?.[0]) { + const locationString = locationStringMatch[0] + + const [line, column] = locationString + .replace('(', '') + .replace(')', '') + .split(/,|:|;/) + .map((v) => parseInt(v.trim(), 10)) + + return { + start: { line, column }, + end: { line, column }, + } + } + + return { start: { line: 1, column: 1 }, end: { line: 1, column: 1 } } +} + export function ResultsMeta({ time = noValue, filesCount = noValue, @@ -103,37 +127,51 @@ export function ResultsMeta({ - {errorsToDisplay.map((error, idx) => ( - - {typeof error === 'string' ? ( - - {error} - - ) : ( - <> - - {getRelativePath( - (error as SearchInFileError)?.filePath, - )} - + {errorsToDisplay.map((error, idx) => { + const relativePath = getRelativePath( + (error as SearchInFileError)?.filePath, + ) + + return ( + + {typeof error === 'string' ? ( - {(error as SearchInFileError)?.error} + {error} - - )} - - ))} + ) : ( + <> + { + const location = extractLocationFormErrorText( + error.error, + ) + + openFile({ + filePath: error.filePath, + location: location, + }) + }} + > + {relativePath} + + + {(error as SearchInFileError)?.error} + + + )} + + ) + })} diff --git a/packages/vscode/src/webviews/SearchResultsPanel/utils.ts b/packages/vscode/src/webviews/SearchResultsPanel/utils.ts new file mode 100644 index 0000000..62310db --- /dev/null +++ b/packages/vscode/src/webviews/SearchResultsPanel/utils.ts @@ -0,0 +1,9 @@ +import { Match } from '@codeque/core' +import { eventBusInstance } from '../../EventBus' + +export const openFile = (data: { + filePath: string + location?: Match['loc'] +}) => { + eventBusInstance.dispatch('open-file', data) +} diff --git a/packages/vscode/src/webviews/Sidebar/components/SearchSettings.tsx b/packages/vscode/src/webviews/Sidebar/components/SearchSettings.tsx index d1cf985..1b053e1 100644 --- a/packages/vscode/src/webviews/Sidebar/components/SearchSettings.tsx +++ b/packages/vscode/src/webviews/Sidebar/components/SearchSettings.tsx @@ -41,6 +41,8 @@ export function SearchSettings({ resultsPanelVisible, }: SearchSettingsProps) { const [mode, setMode] = useState(initialSettings?.mode) + const [fileType, setFileType] = useState(initialSettings?.fileType) + const [caseType, setCase] = useState(initialSettings?.caseType) const [searchNodeModules, setSearchNodeModules] = useState( initialSettings?.searchNodeModules, @@ -108,6 +110,25 @@ export function SearchSettings({ [setSettings], ) + const handleFileTypeChange = useCallback( + (fileType: StateShape['fileType']) => { + let newMode = mode + + if (fileType === 'all') { + newMode = 'text' + } + + setFileType(fileType) + setMode(newMode) + + setSettings({ + fileType, + mode: newMode, + }) + }, + [setSettings, mode], + ) + const handleCaseChange = useCallback( (caseType: CaseType) => { setCase(caseType) @@ -203,6 +224,20 @@ export function SearchSettings({ eventBusInstance.dispatch('show-results-panel') } + const allFileTypesSelected = fileType === 'all' + + const disabledSearchModeCursorProps = allFileTypesSelected + ? ({ + cursor: 'not-allowed', + } as const) + : {} + const disabledSearchModeProps = allFileTypesSelected + ? ({ + pointerEvents: 'none', + opacity: '0.6', + } as const) + : {} + return ( {!resultsPanelVisible && ( @@ -230,42 +265,79 @@ export function SearchSettings({ Query settings - Mode: + File types: - + - text + All - include + JS/TS/JSON - exact + HTML + + + + + Mode: + + + + - include with order + text + + + + include + + + exact + + + include with order + + + diff --git a/packages/vscode/webpack.webviews.config.js b/packages/vscode/webpack.webviews.config.js index 346857c..cd60ef7 100644 --- a/packages/vscode/webpack.webviews.config.js +++ b/packages/vscode/webpack.webviews.config.js @@ -26,6 +26,7 @@ module.exports = { espree: false, esprima: false, '@babel/eslint-parser': false, + '@angular-eslint/template-parser': false, }, }, output: { From c7b13164f64aa2adc3c5a01f5afdb17274c3e606 Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Mon, 26 Jun 2023 20:45:47 +0200 Subject: [PATCH 009/110] =?UTF-8?q?feat:=20add=20proper=20support=20for=20?= =?UTF-8?q?html=20=F0=9F=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HTML/matchCodePatterns/all.test.ts | 76 ++++++++++++++++++- .../matchCodePatterns/JSX2.test.ts | 23 ++++++ packages/core/src/parseQuery.ts | 65 +++++++++++----- .../beforeWildcardsComparators.ts | 12 ++- .../angularEslintTemplateParser/common.ts | 7 +- .../matchMultilineQueriesNodesComparator.ts | 19 +++++ .../angularEslintTemplateParser/settings.ts | 70 ++++++++++++++--- .../beforeWildcardsComparators.ts | 8 ++ .../babelEslintParser/settings.ts | 2 +- .../Other/matchWildcardsInPropValueNodes.ts | 3 +- packages/core/src/searchMultiThread.ts | 3 +- .../core/src/searchStages/compareNodes.ts | 1 + .../getLocationOfMultilineMatch.ts | 6 +- .../src/searchStages/searchFileContent.ts | 4 +- .../core/src/searchStages/traverseAndMatch.ts | 6 +- .../core/src/searchStages/validateMatch.ts | 18 +++-- packages/core/src/types.ts | 15 ++++ packages/core/src/utils.ts | 13 +++- packages/vscode/src/SearchManager.ts | 13 ++-- packages/vscode/src/utils.ts | 8 ++ .../components/QueryEditor.tsx | 23 +++++- .../components/SearchResult.tsx | 30 ++------ .../src/webviews/SearchResultsPanel/index.tsx | 11 ++- .../vscode/src/webviews/components/Editor.tsx | 3 + .../getLanguageBasedOnFileExtension.tsx | 2 +- packages/vscode/webpack.webviews.config.js | 2 +- 26 files changed, 349 insertions(+), 94 deletions(-) create mode 100644 packages/core/src/parserSettings/angularEslintTemplateParser/matchMultilineQueriesNodesComparator.ts create mode 100644 packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts diff --git a/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts b/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts index f1c0184..f412758 100644 --- a/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts +++ b/packages/core/__tests__/HTML/matchCodePatterns/all.test.ts @@ -1,4 +1,5 @@ import { searchInStrings } from '../../../src/searchInStrings' +import dedent from 'dedent' describe('Basic queries', () => { const fileContent = ` @@ -10,7 +11,7 @@ describe('Basic queries', () => {
-
+

Some other text

` @@ -117,7 +118,7 @@ describe('Basic queries', () => { const queries = [`<$$>

Some text

`] const { matches, errors } = searchInStrings({ - mode: 'exact', + mode: 'include', caseInsensitive: true, queryCodes: queries, files: [ @@ -164,7 +165,6 @@ describe('Basic queries', () => { content: fileContent, }, ], - debug: true, }) expect(errors).toHaveLength(0) @@ -208,4 +208,74 @@ describe('Basic queries', () => { expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) + + it('Should find multiple nodes 1', () => { + const fileContent = ` +
+

Some text

+
+

+
+ +
+ ` + + const queries = [ + ` +
+
+ `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should find multiple nodes 2', () => { + const queries = [ + ` +
+
+ `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + console.log(matches[0].code) + + expect( + dedent` +
+

Some text

+
+
+ +
+ `, + ).toBe(matches[0].code) + }) }) diff --git a/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX2.test.ts b/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX2.test.ts index e476be9..a2a3c04 100644 --- a/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX2.test.ts +++ b/packages/core/__tests__/JavaScriptWithJSX/matchCodePatterns/JSX2.test.ts @@ -314,4 +314,27 @@ describe('JSX', () => { expect(errors).toHaveLength(0) expect(matches.length).toBe(2) }) + + it('Should find jsx with title prop using query without title prop', () => { + const fileContent = ` +
+ asd +
+ ` + + const queries = [ + ` + <$$>asd + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + files: [{ content: fileContent, path: '' }], + queryCodes: queries, + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) }) diff --git a/packages/core/src/parseQuery.ts b/packages/core/src/parseQuery.ts index 676f040..f21889f 100644 --- a/packages/core/src/parseQuery.ts +++ b/packages/core/src/parseQuery.ts @@ -6,26 +6,29 @@ import { PoorNodeType, Position, } from './types' -import { measureStart, SPACE_CHAR, normalizeText } from './utils' +import { measureStart, decomposeString } from './utils' import { isNodeArray, getKeysToCompare } from './astUtils' const MIN_TOKEN_LEN = 2 -export const decomposeString = (str: string, anyStringWildcardRegExp: RegExp) => - str - .split(anyStringWildcardRegExp) - .map((part) => normalizeText(part).split(SPACE_CHAR)) - .flat(1) - -export const getUniqueTokens = ( - queryNode: PoorNodeType, - caseInsensitive: boolean, - parserSettings: ParserSettings, - tokens: Set = new Set(), -) => { - const { numericLiteralUtils, stringLikeLiteralUtils, getIdentifierNodeName } = - parserSettings +const defaultGetUniqueTokensFromStringOrIdentifierNode = ({ + queryNode, + caseInsensitive, + parserSettings, +}: { + queryNode: PoorNodeType + caseInsensitive: boolean + parserSettings: Pick< + ParserSettings, + | 'isIdentifierNode' + | 'stringLikeLiteralUtils' + | 'getIdentifierNodeName' + | 'wildcardUtils' + > +}) => { + const { stringLikeLiteralUtils, getIdentifierNodeName } = parserSettings const { anyStringWildcardRegExp } = parserSettings.wildcardUtils + const tokens: string[] = [] if (parserSettings.isIdentifierNode(queryNode)) { const trimmedWildcards = parserSettings.wildcardUtils @@ -34,7 +37,7 @@ export const getUniqueTokens = ( trimmedWildcards.forEach((part) => { if (part.length >= MIN_TOKEN_LEN) { - tokens.add(caseInsensitive ? part.toLocaleLowerCase() : part) + tokens.push(caseInsensitive ? part.toLocaleLowerCase() : part) } }) } @@ -52,11 +55,31 @@ export const getUniqueTokens = ( trimmedWildcards.forEach((part) => { if (part.length >= MIN_TOKEN_LEN) { - tokens.add(caseInsensitive ? part.toLocaleLowerCase() : part) + tokens.push(caseInsensitive ? part.toLocaleLowerCase() : part) } }) } + return tokens +} + +export const getUniqueTokens = ( + queryNode: PoorNodeType, + caseInsensitive: boolean, + parserSettings: ParserSettings, + tokens: Set = new Set(), +) => { + const { numericLiteralUtils } = parserSettings + + const tokensFromStringsOrIdNode = + defaultGetUniqueTokensFromStringOrIdentifierNode({ + queryNode, + caseInsensitive, + parserSettings, + }) + + tokensFromStringsOrIdNode.forEach(tokens.add, tokens) + if (numericLiteralUtils.isNumericLiteralNode(queryNode)) { const raw = numericLiteralUtils.getNumericLiteralValue(queryNode) @@ -102,6 +125,10 @@ export const extractQueryNode = ( ) => { const queryBody = parserSettings.getProgramBodyFromRootNode(fileNode) + if (queryBody.length === 0) { + throw new Error('Query is empty or code was not parsed correctly') + } + if (queryBody.length === 1) { return { queryNode: parserSettings.unwrapExpressionStatement(queryBody[0]), @@ -210,7 +237,9 @@ export const parseQueries = ( parserSettings.preprocessQueryCode?.(queryText) ?? queryText try { - const parsedAsIs = parserSettings.parseCode(preprocessedQueryCode) + const parsedAsIs = parserSettings.parseCode( + preprocessedQueryCode.trim(), + ) const { queryNode, isMultistatement } = extractQueryNode( parsedAsIs, diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts index 268668d..4915afe 100644 --- a/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts @@ -1,7 +1,8 @@ import { NodesComparator } from '../../types' import { createMatchWildcardsInPropValueNodesComparator } from '../nodeComparatorFactories/Other/matchWildcardsInPropValueNodes' +import { matchWildcardsInPropValueNodesComparator } from './matchMultilineQueriesNodesComparator' -const matchWildcardsInPropValueNodesComparator = +const matchWildcardsInTextAttributeNodesComparator = createMatchWildcardsInPropValueNodesComparator({ nodeType: 'TextAttribute', keysToTraverse: [], @@ -9,6 +10,15 @@ const matchWildcardsInPropValueNodesComparator = keysWithWildcards: ['name', 'value'], }) +const matchWildcardsInElement$1NodesComparator = + createMatchWildcardsInPropValueNodesComparator({ + nodeType: 'Element$1', + keysToTraverse: ['attributes', 'children'], + keysWithWildcards: ['name'], + }) + export const beforeWildcardsComparators: NodesComparator[] = [ + matchWildcardsInTextAttributeNodesComparator, + matchWildcardsInElement$1NodesComparator, matchWildcardsInPropValueNodesComparator, ] diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts index 8a8b44a..50eade7 100644 --- a/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/common.ts @@ -2,12 +2,11 @@ import { createWildcardUtils } from '../../wildcardUtilsFactory' import { PoorNodeType } from '../../types' /* - * TextAttribute is considered identifier node name only for purpose of shallow match - * It contains both prop and value strings. - * We have custom matcher for TextAttribute node so it will never get compared by generic wildcard utils + * We don't have purely identifier nodes in this parser + * We compare everything using string wildcards */ -export const identifierNodeTypes = ['Element$1', 'TextAttribute'] +export const identifierNodeTypes: string[] = [] const wildcardChar = '$' const numericWildcard = '0x0' diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/matchMultilineQueriesNodesComparator.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/matchMultilineQueriesNodesComparator.ts new file mode 100644 index 0000000..2903527 --- /dev/null +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/matchMultilineQueriesNodesComparator.ts @@ -0,0 +1,19 @@ +import { NodesComparator } from '../../types' + +/* + * Support performing multiline html queries by changing query Program node into ElementNode + */ +export const matchWildcardsInPropValueNodesComparator: NodesComparator = ( + { queryNode, fileNode }, + _, + { fileKeysToTraverseForOtherMatches }, +) => { + if (queryNode?.type === 'Program' && fileNode?.type === 'Element$1') { + return { + levelMatch: true, // we are not interested in other fields than children of both + queryKeysToTraverseForValidatingMatch: ['templateNodes'], + fileKeysToTraverseForValidatingMatch: ['children'], + fileKeysToTraverseForOtherMatches, + } + } +} diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts index 1e24c8a..ca6c148 100644 --- a/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/settings.ts @@ -8,8 +8,13 @@ import { ProgramNodeAndBlockNodeUtils, StringLikeLiteralUtils, NodesComparatorParameters, + GetUniqueTokensFromStringOrIdentifierNode, } from '../../types' -import { normalizeText, runNodesComparators } from '../../utils' +import { + decomposeString, + normalizeText, + runNodesComparators, +} from '../../utils' import { getIdentifierNodeName, identifierNodeTypes, @@ -32,12 +37,11 @@ const unwrapExpressionStatement = (node: PoorNodeType) => { } const createBlockStatementNode = ( - body: PoorNodeType[], + templateNodes: PoorNodeType[], position: MatchPosition, ) => ({ - type: 'BlockStatement', - body, - directives: [], // whatever it is + type: 'Program', + templateNodes, ...position, }) @@ -98,7 +102,9 @@ const shouldCompareNode = (node: PoorNodeType) => { if (node.type === 'Text$3') { const value: string = getSanitizedNodeValue('Text$3', 'value', node.value) - return value.length > 0 + const shouldCompare = value.length > 0 + + return shouldCompare } return true @@ -110,8 +116,8 @@ const isIdentifierNode = (node: PoorNodeType) => identifierNodeTypes.includes(getNodeType(node)) const stringLikeLiteralUtils: StringLikeLiteralUtils = { - isStringLikeLiteralNode: (node: PoorNodeType) => - node.type === 'Text$3' || node.type === 'TextAttribute', + // Text$3 is only pure string node + isStringLikeLiteralNode: (node: PoorNodeType) => node.type === 'Text$3', getStringLikeLiteralValue: (node: PoorNodeType) => { return node?.value as string }, @@ -125,16 +131,16 @@ const numericLiteralUtils: NumericLiteralUtils = { const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { isProgramNode: (node: PoorNodeType) => node.type === 'Program', - isBlockNode: (node: PoorNodeType) => node.type === 'BlockStatement', + isBlockNode: (node: PoorNodeType) => node.type === 'Program', programNodeBodyKey: 'templateNodes', - blockNodeBodyKey: 'body', + blockNodeBodyKey: 'templateNodes', } const getNodePosition: ParserSettings['getNodePosition'] = ( node: PoorNodeType, ) => ({ - start: (node.sourceSpan as any).start.offset as number, - end: (node.sourceSpan as any).end.offset as number, + start: ((node?.sourceSpan as any)?.start?.offset as number) ?? 0, + end: ((node?.sourceSpan as any)?.end?.offset as number) ?? 0, loc: node.loc as unknown as Location, }) @@ -198,6 +204,45 @@ const compareNodesBeforeWildcardsComparison = ( return runNodesComparators(beforeWildcardsComparators, nodeComparatorParams) } +const getUniqueTokensFromStringOrIdentifierNode: GetUniqueTokensFromStringOrIdentifierNode = + ({ queryNode, caseInsensitive, parserSettings }) => { + const MIN_TOKEN_LEN = 2 + + const { anyStringWildcardRegExp } = parserSettings.wildcardUtils + const tokens: string[] = [] + + const valuesToProcess: string[] = [] + + if (queryNode.type === 'TextAttribute') { + valuesToProcess.push(queryNode.name as string) + valuesToProcess.push(queryNode.value as string) + } + + if (queryNode.type === 'Element$1') { + valuesToProcess.push(queryNode.name as string) + } + + if (queryNode.type === 'Text$3') { + valuesToProcess.push(queryNode.value as string) + } + + valuesToProcess + .map((val) => + parserSettings.wildcardUtils.removeWildcardAliasesFromStringLiteral( + val, + ), + ) + .map((val) => decomposeString(val, anyStringWildcardRegExp)) + .flat(1) + .forEach((part) => { + if (part.length >= MIN_TOKEN_LEN) { + tokens.push(caseInsensitive ? part.toLocaleLowerCase() : part) + } + }) + + return tokens + } + export const angularEslintTemplateParser: ParserSettings = { supportedExtensions, parseCode, @@ -227,6 +272,7 @@ export const angularEslintTemplateParser: ParserSettings = { alternativeNodeTypes, postprocessQueryNode, preprocessQueryCode, + getUniqueTokensFromStringOrIdentifierNode, } export default angularEslintTemplateParser diff --git a/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts new file mode 100644 index 0000000..7c6c68d --- /dev/null +++ b/packages/core/src/parserSettings/babelEslintParser/beforeWildcardsComparators.ts @@ -0,0 +1,8 @@ +import { NodesComparator } from '../../types' +import { wildcardForTypeKeywordsNodesComparator } from './nodeComparators/wildcardForTypeKeywords' +import { wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator } from './nodeComparators/wildcardForAssignmentPatternOrDefaultParamValues' + +export const beforeWildcardsComparators: NodesComparator[] = [ + wildcardForTypeKeywordsNodesComparator, + wildcardForAssignmentPatternOrDefaultParamValuesNodesComparator, +] diff --git a/packages/core/src/parserSettings/babelEslintParser/settings.ts b/packages/core/src/parserSettings/babelEslintParser/settings.ts index 7a24791..bad4f0a 100644 --- a/packages/core/src/parserSettings/babelEslintParser/settings.ts +++ b/packages/core/src/parserSettings/babelEslintParser/settings.ts @@ -22,7 +22,7 @@ import { import { normalizeText, runNodesComparators } from '../../utils' import { afterWildcardsComparators } from './afterWildcardsComparators' -import { beforeWildcardsComparators } from '../angularEslintTemplateParser/beforeWildcardsComparators' +import { beforeWildcardsComparators } from './beforeWildcardsComparators' const parseCode = (code: string, filePath = '') => { const maybeWrappedJSON = /\.json$/.test(filePath) ? `(${code})` : code diff --git a/packages/core/src/parserSettings/nodeComparatorFactories/Other/matchWildcardsInPropValueNodes.ts b/packages/core/src/parserSettings/nodeComparatorFactories/Other/matchWildcardsInPropValueNodes.ts index 58d2c72..9a23dc9 100644 --- a/packages/core/src/parserSettings/nodeComparatorFactories/Other/matchWildcardsInPropValueNodes.ts +++ b/packages/core/src/parserSettings/nodeComparatorFactories/Other/matchWildcardsInPropValueNodes.ts @@ -19,9 +19,10 @@ export const createMatchWildcardsInPropValueNodesComparator = ( { queryNode, fileNode, searchSettings, matchContext }, _, - { fileKeysToTraverseForOtherMatches }, + { fileKeysToTraverseForOtherMatches, log }, ) => { if (queryNode?.type === nodeType && fileNode?.type === nodeType) { + log('Compare PropValue Node', nodeType) const { wildcardUtils } = searchSettings.parserSettings const { caseInsensitive } = searchSettings diff --git a/packages/core/src/searchMultiThread.ts b/packages/core/src/searchMultiThread.ts index 90be525..541ff5f 100644 --- a/packages/core/src/searchMultiThread.ts +++ b/packages/core/src/searchMultiThread.ts @@ -21,6 +21,7 @@ export const searchMultiThread = async ({ maxResultsLimit, singleThreadFilesCountLimitStructural = singleThreadFilesCountLimitStructuralDefault, singleThreadFilesCountLimitText = singleThreadFilesCountLimitTextDefault, + debug, ...params }: FileSystemSearchArgs & { hardStopFlag?: HardStopFlag @@ -147,7 +148,7 @@ export const searchMultiThread = async ({ }, ) - if (params.debug) { + if (debug) { logMetrics() } diff --git a/packages/core/src/searchStages/compareNodes.ts b/packages/core/src/searchStages/compareNodes.ts index db2d5b2..c9783ff 100644 --- a/packages/core/src/searchStages/compareNodes.ts +++ b/packages/core/src/searchStages/compareNodes.ts @@ -92,6 +92,7 @@ export const compareNodes = ( fileKeysMapper, fileKeysToTraverseForOtherMatches, measureCompare, + log, } const maybeCompareResult = diff --git a/packages/core/src/searchStages/getLocationOfMultilineMatch.ts b/packages/core/src/searchStages/getLocationOfMultilineMatch.ts index 0f1f93d..d79d286 100644 --- a/packages/core/src/searchStages/getLocationOfMultilineMatch.ts +++ b/packages/core/src/searchStages/getLocationOfMultilineMatch.ts @@ -12,7 +12,11 @@ export const getLocationOfMultilineMatch = ( const statements = queryNode[blockNodeBodyKey] as PoorNodeType[] - const alreadyPickedStatementNodes: PoorNodeType[] = [] + /** + * We initialise already picked statements with the top-level match node to filter it out in results. + * For some parses, like angular-eslint, top-level node can be matched by query statement node. + */ + const alreadyPickedStatementNodes: PoorNodeType[] = [match.node] const subMatches = statements .map((statement) => { diff --git a/packages/core/src/searchStages/searchFileContent.ts b/packages/core/src/searchStages/searchFileContent.ts index f7ef615..f81f1b6 100644 --- a/packages/core/src/searchStages/searchFileContent.ts +++ b/packages/core/src/searchStages/searchFileContent.ts @@ -56,7 +56,7 @@ export const searchFileContent = ({ allMatches = results .map(({ query, matches }) => { - return matches.map((match) => { + return matches.map(({ node, ...match }) => { const { code, indentationBase } = prepareCodeResult({ fileContent, ...match, @@ -85,7 +85,5 @@ export const searchFileContent = ({ measureSearch() } - // console.log('all matches', allMatches) - return allMatches } diff --git a/packages/core/src/searchStages/traverseAndMatch.ts b/packages/core/src/searchStages/traverseAndMatch.ts index 14df6d2..773fe96 100644 --- a/packages/core/src/searchStages/traverseAndMatch.ts +++ b/packages/core/src/searchStages/traverseAndMatch.ts @@ -224,9 +224,9 @@ export const traverseAndMatch = ( // We keep logs in IIFE to get the whole logic removed during build log( 'foundMatchStart:\n', - getCodeForNode(fileNode, 'file'), - '\n', getCodeForNode(queryNode, 'query'), + '\n', + getCodeForNode(fileNode, 'file'), '\n'.padEnd(10, '_'), ) @@ -242,6 +242,8 @@ export const traverseAndMatch = ( matchContext.getAllAliases(), ), ) + } else { + log('match not validated') } } diff --git a/packages/core/src/searchStages/validateMatch.ts b/packages/core/src/searchStages/validateMatch.ts index c1d8499..334da38 100644 --- a/packages/core/src/searchStages/validateMatch.ts +++ b/packages/core/src/searchStages/validateMatch.ts @@ -102,7 +102,7 @@ export const validateMatch = ( if (Array.isArray(fileValue as PoorNodeType[])) { log('validate: is array') - const nodesArr = (fileValue as PoorNodeType[]).filter( + const fileNodesArr = (fileValue as PoorNodeType[]).filter( parserSettings.shouldCompareNode, ) const queryNodesArr = (queryValue as PoorNodeType[]).filter( @@ -110,12 +110,12 @@ export const validateMatch = ( ) if (isExact) { - if (nodesArr.length !== queryNodesArr.length) { + if (fileNodesArr.length !== queryNodesArr.length) { return false } - for (let i = 0; i < nodesArr.length; i++) { - const newCurrentNode = nodesArr[i] + for (let i = 0; i < fileNodesArr.length; i++) { + const newCurrentNode = fileNodesArr[i] const newCurrentQueryNode = queryNodesArr[i] if ( @@ -132,7 +132,9 @@ export const validateMatch = ( } } } else { - if (queryNodesArr.length > nodesArr.length) { + if (queryNodesArr.length > fileNodesArr.length) { + log('validate: more query nodes than array nodes') + return false } @@ -150,8 +152,8 @@ export const validateMatch = ( for (let i = 0; i < queryNodesArrSorted.length; i++) { const newQueryNode = queryNodesArrSorted[i] - for (let j = 0; j < nodesArr.length; j++) { - const newFileNode = nodesArr[j] + for (let j = 0; j < fileNodesArr.length; j++) { + const newFileNode = fileNodesArr[j] if (!matchedIndexes.includes(j)) { if ( @@ -195,6 +197,8 @@ export const validateMatch = ( return false } } + + log('validate: non boolean return result for comparing nodes array') } } else { log('validate: is Node') diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index fbad46e..75d3c5f 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -85,6 +85,7 @@ export type FileSystemSearchArgs = { maxResultsLimit?: number hardStopFlag?: HardStopFlag parser?: ParserType + returnMatchedNodes?: boolean } export type ParseError = { @@ -187,6 +188,7 @@ export type NodesComparator = ( fileKeysMapper: (key: string) => string fileKeysToTraverseForOtherMatches: string[] measureCompare: () => void + log: (...text: string[]) => void }, ) => CompareNodesReturnType | undefined @@ -227,6 +229,18 @@ export type ProgramNodeAndBlockNodeUtils = { blockNodeBodyKey: string } +export type GetUniqueTokensFromStringOrIdentifierNode = (arg: { + queryNode: PoorNodeType + caseInsensitive: boolean + parserSettings: Pick< + ParserSettings, + | 'isIdentifierNode' + | 'stringLikeLiteralUtils' + | 'getIdentifierNodeName' + | 'wildcardUtils' + > +}) => string[] + export type ParserSettings = { supportedExtensions: string[] parseCode: (code: string, filePath?: string) => PoorNodeType @@ -268,4 +282,5 @@ export type ParserSettings = { alternativeNodeTypes: Record preprocessQueryCode?: (code: string) => string postprocessQueryNode?: (queryNode: PoorNodeType) => PoorNodeType + getUniqueTokensFromStringOrIdentifierNode?: GetUniqueTokensFromStringOrIdentifierNode } diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index ea6060e..99bd7a3 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -9,6 +9,7 @@ import { Mode, NodesComparator, NodesComparatorParameters, + MatchPosition, } from './types' export const getMode = (mode: Mode = 'include') => { @@ -154,7 +155,9 @@ export const nonIdentifierOrKeywordGlobal = new RegExp( 'g', ) -export const dedupMatches = (matches: M[]): M[] => { +export const dedupMatches = ( + matches: M[], +): M[] => { const deduped: M[] = [] matches.forEach((match) => { @@ -184,7 +187,7 @@ export const prepareCodeResult = ({ start, end, loc, -}: { fileContent: string } & Omit) => { +}: { fileContent: string } & MatchPosition) => { const frame = fileContent.substring(start - loc.start.column, end) const firstLineWhiteCharsCountRegExp = new RegExp(`^\\s*`) @@ -244,3 +247,9 @@ export const groupBy = >( }, {} as Record), ) } + +export const decomposeString = (str: string, splitter: RegExp) => + str + .split(splitter) + .map((part) => normalizeText(part).split(SPACE_CHAR)) + .flat(1) diff --git a/packages/vscode/src/SearchManager.ts b/packages/vscode/src/SearchManager.ts index 1a25279..1c60a68 100644 --- a/packages/vscode/src/SearchManager.ts +++ b/packages/vscode/src/SearchManager.ts @@ -20,7 +20,7 @@ import path from 'path' import * as vscode from 'vscode' import { eventBusInstance } from './EventBus' import { StateManager, StateShape, SearchFileType } from './StateManager' -import { simpleDebounce } from './utils' +import { simpleDebounce, parserNameMap } from './utils' type FilesLists = { files: string[] @@ -35,12 +35,6 @@ const extensionTesterMap: Record = { 'js-ts-json': typeScriptFamilyExtensionTester, } -const parserNameMap: Record = { - all: 'babel', // it does not matter, just need value for happy TS - html: 'angular-eslint-template-parser', - 'js-ts-json': 'babel', -} - export class SearchManager { private isWorkspace: boolean | undefined private roots: Root[] | undefined @@ -439,15 +433,18 @@ export class SearchManager { hardStopFlag: this.currentSearchHardStopFlag, maxResultsLimit: this.maxResultsLimit, }) + const searchEnd = Date.now() + const searchTime = (searchEnd - searchStart) / 1000 + eventBusInstance.dispatch('have-results', { results: this.processSearchResults( { ...results, matches: allPartialMatches }, roots, isWorkspace, ), - time: (searchEnd - searchStart) / 1000, + time: searchTime, files: filesListFilteredByExtension, isWorkspace, }) diff --git a/packages/vscode/src/utils.ts b/packages/vscode/src/utils.ts index c8a3365..882efb6 100644 --- a/packages/vscode/src/utils.ts +++ b/packages/vscode/src/utils.ts @@ -1,5 +1,7 @@ import dedent from 'dedent' import { useEffect, useState } from 'react' +import { ParserType } from '@codeque/core' +import { SearchFileType } from './StateManager' // eslint-disable-next-line export function simpleDebounce unknown>(func: F, timeout = 300) { @@ -57,3 +59,9 @@ export function getScrollParent(node: any): any { return getScrollParent(node.parentNode) } } + +export const parserNameMap: Record = { + all: 'babel', // it does not matter, just need value for happy TS + html: 'angular-eslint-template-parser', + 'js-ts-json': 'babel', +} diff --git a/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx b/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx index a60662d..7a97598 100644 --- a/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx +++ b/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx @@ -6,7 +6,9 @@ import { Mode, searchInStrings } from '@codeque/core/web' import { Fragment, useCallback, useEffect, useState } from 'react' import { codeRed } from '../../components/Highlight' import { useThemeType } from '../../components/useThemeType' -import useDebounce from '../../../utils' +import useDebounce, { parserNameMap } from '../../../utils' + +import { SearchFileType } from '../../../StateManager' type Error = { text: string @@ -26,6 +28,7 @@ type Props = { setQuery: (query: string) => void mode: Mode setHasQueryError: (value: boolean) => void + fileType: SearchFileType } const renderHint = (hint: Hint) => { @@ -60,11 +63,22 @@ const getParseErrorHighlight = (errorLocation: { } } +const getHighlightFileExtension = (fileType: SearchFileType) => { + const map: Record = { + all: 'tsx', + html: 'html', + 'js-ts-json': 'tsx', + } + + return map[fileType] +} + export function QueryEditor({ query, setQuery, setHasQueryError, mode, + fileType, }: Props) { const [queryHint, setQueryHint] = useState(null) const [queryError, setQueryError] = useState(null) @@ -84,7 +98,8 @@ export function QueryEditor({ setQueryHint(null) try { - //@ts-ignore + const parser = parserNameMap[fileType] + const matches = searchInStrings({ queryCodes: [query], files: [ @@ -94,11 +109,14 @@ export function QueryEditor({ }, ], mode, + parser, }) + const hint = matches.hints?.[0]?.[0] ?? null setQueryHint(hint) if (matches.errors.length > 0) { + console.error(matches.errors) const error = matches.errors[0] // indicates query parse error @@ -149,6 +167,7 @@ export function QueryEditor({ borderColor={themeType === 'dark' ? 'transparent' : 'gray.300'} onEditorFocus={handleEditorFocus} onEditorBlur={handleEditorBlur} + fileExtension={getHighlightFileExtension(fileType)} /> {!isEditorFocusedDebounced && ( = match.loc.start.line - const shouldHighlight = - removeWhiteSpaces(extendedCodeFrameCode).length !== - removeWhiteSpaces(match.code).length - const highlightColumnChangeDueToDedent = shouldDedentResult ? initialWhitespaceSequence.length : 0 diff --git a/packages/vscode/src/webviews/SearchResultsPanel/index.tsx b/packages/vscode/src/webviews/SearchResultsPanel/index.tsx index 9013bf3..df9f21b 100644 --- a/packages/vscode/src/webviews/SearchResultsPanel/index.tsx +++ b/packages/vscode/src/webviews/SearchResultsPanel/index.tsx @@ -7,7 +7,7 @@ import { useEffect, useState, useCallback, useMemo, useRef } from 'react' import ReactDOM from 'react-dom/client' import { Providers } from '../components/Providers' import { QueryEditor } from './components/QueryEditor' -import { StateShape } from '../../StateManager' +import { StateShape, SearchFileType } from '../../StateManager' import { SearchResultsList } from './components/SearchResults' import { Flex, Spinner } from '@chakra-ui/react' import { ResultsMeta } from './components/ResultsMeta' @@ -34,6 +34,8 @@ const Panel = () => { null, ) const [query, setQuery] = useState(null) + const [fileType, setFileType] = useState(null) + const [nextSearchIsFromSelection, setNextSearchIsFromSelection] = useState(false) @@ -56,6 +58,10 @@ const Panel = () => { if (data.mode !== undefined) { setMode(data.mode) } + + if (data.fileType !== undefined) { + setFileType(data.fileType) + } }, []) const handleInitialSettings = useCallback((data: StateShape) => { @@ -346,12 +352,13 @@ const Panel = () => { return ( - {query !== null ? ( + {query !== null && fileType !== null ? ( ) : null} void onEditorBlur?: () => void + fileExtension?: string } const customTextAreaCn = 'editor-text-area' @@ -21,6 +22,7 @@ export function Editor({ theme: themeType, onEditorFocus, onEditorBlur, + fileExtension, ...rest }: Props) { const theme = themeType === 'dark' ? darkTheme : lightTheme @@ -61,6 +63,7 @@ export function Editor({ theme={theme} highlight customHighlight={customHighlight} + fileExtension={fileExtension} // startLineNumber={1} > {code} diff --git a/packages/vscode/src/webviews/components/getLanguageBasedOnFileExtension.tsx b/packages/vscode/src/webviews/components/getLanguageBasedOnFileExtension.tsx index 8c65268..63350db 100644 --- a/packages/vscode/src/webviews/components/getLanguageBasedOnFileExtension.tsx +++ b/packages/vscode/src/webviews/components/getLanguageBasedOnFileExtension.tsx @@ -34,7 +34,7 @@ export const getLanguageBasedOnFileExtension = ( return 'javascript' } - const markupLike = ['html'] + const markupLike = ['html', 'htm'] if (markupLike.includes(fileExtension)) { return 'markup' diff --git a/packages/vscode/webpack.webviews.config.js b/packages/vscode/webpack.webviews.config.js index cd60ef7..c3d699e 100644 --- a/packages/vscode/webpack.webviews.config.js +++ b/packages/vscode/webpack.webviews.config.js @@ -26,7 +26,7 @@ module.exports = { espree: false, esprima: false, '@babel/eslint-parser': false, - '@angular-eslint/template-parser': false, + assert: false, // for angular-eslint }, }, output: { From bdede2946449935b10a676ea847b6ae5bb42e596 Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Tue, 27 Jun 2023 11:51:28 +0200 Subject: [PATCH 010/110] wip:cs --- packages/core/package.json | 4 +- .../csstree/beforeWildcardsComparators.ts | 24 ++ .../core/src/parserSettings/csstree/common.ts | 24 ++ .../matchMultilineQueriesNodesComparator.ts | 19 + .../src/parserSettings/csstree/settings.ts | 355 ++++++++++++++++++ packages/core/src/parserSettings/index.ts | 1 + packages/core/src/types.ts | 1 + yarn.lock | 23 ++ 8 files changed, 450 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts create mode 100644 packages/core/src/parserSettings/csstree/common.ts create mode 100644 packages/core/src/parserSettings/csstree/matchMultilineQueriesNodesComparator.ts create mode 100644 packages/core/src/parserSettings/csstree/settings.ts diff --git a/packages/core/package.json b/packages/core/package.json index 5706a49..2982eb1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -26,9 +26,9 @@ "url": "https://github.com/codeque-co/codeque" }, "devDependencies": { + "@angular-eslint/template-parser": "^15.2.1", "@babel/eslint-parser": "^7.21.8", "@babel/generator": "^7.21.4", - "@angular-eslint/template-parser": "^15.2.1", "@types/dedent": "^0.7.0", "@types/esprima": "^4.0.3", "@types/glob": "^7.2.0", @@ -42,6 +42,7 @@ "babel-jest": "^27.4.4", "babel-plugin-root-import": "^6.6.0", "concurrently": "^7.2.1", + "css-tree": "^2.3.1", "deep-object-diff": "^1.1.7", "espree": "^9.5.2", "esprima": "^4.0.1", @@ -56,6 +57,7 @@ "@babel/parser": "7.19.4", "@babel/plugin-syntax-typescript": "7.18.6", "@babel/types": "7.19.4", + "@types/css-tree": "^2.3.1", "dedent": "^0.7.0", "dpdm": "^3.12.0", "glob-escape": "^0.0.2", diff --git a/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts new file mode 100644 index 0000000..4915afe --- /dev/null +++ b/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts @@ -0,0 +1,24 @@ +import { NodesComparator } from '../../types' +import { createMatchWildcardsInPropValueNodesComparator } from '../nodeComparatorFactories/Other/matchWildcardsInPropValueNodes' +import { matchWildcardsInPropValueNodesComparator } from './matchMultilineQueriesNodesComparator' + +const matchWildcardsInTextAttributeNodesComparator = + createMatchWildcardsInPropValueNodesComparator({ + nodeType: 'TextAttribute', + keysToTraverse: [], + // Order of keys definition does matter for matchContext! In case someone would use the same alias in eg. prop and value + keysWithWildcards: ['name', 'value'], + }) + +const matchWildcardsInElement$1NodesComparator = + createMatchWildcardsInPropValueNodesComparator({ + nodeType: 'Element$1', + keysToTraverse: ['attributes', 'children'], + keysWithWildcards: ['name'], + }) + +export const beforeWildcardsComparators: NodesComparator[] = [ + matchWildcardsInTextAttributeNodesComparator, + matchWildcardsInElement$1NodesComparator, + matchWildcardsInPropValueNodesComparator, +] diff --git a/packages/core/src/parserSettings/csstree/common.ts b/packages/core/src/parserSettings/csstree/common.ts new file mode 100644 index 0000000..50eade7 --- /dev/null +++ b/packages/core/src/parserSettings/csstree/common.ts @@ -0,0 +1,24 @@ +import { createWildcardUtils } from '../../wildcardUtilsFactory' +import { PoorNodeType } from '../../types' + +/* + * We don't have purely identifier nodes in this parser + * We compare everything using string wildcards + */ + +export const identifierNodeTypes: string[] = [] + +const wildcardChar = '$' +const numericWildcard = '0x0' + +export const getIdentifierNodeName = (node: PoorNodeType) => node.name as string +export const setIdentifierNodeName = (node: PoorNodeType, name: string) => { + node.name = name +} + +export const wildcardUtils = createWildcardUtils( + identifierNodeTypes, + numericWildcard, + wildcardChar, + getIdentifierNodeName, +) diff --git a/packages/core/src/parserSettings/csstree/matchMultilineQueriesNodesComparator.ts b/packages/core/src/parserSettings/csstree/matchMultilineQueriesNodesComparator.ts new file mode 100644 index 0000000..2903527 --- /dev/null +++ b/packages/core/src/parserSettings/csstree/matchMultilineQueriesNodesComparator.ts @@ -0,0 +1,19 @@ +import { NodesComparator } from '../../types' + +/* + * Support performing multiline html queries by changing query Program node into ElementNode + */ +export const matchWildcardsInPropValueNodesComparator: NodesComparator = ( + { queryNode, fileNode }, + _, + { fileKeysToTraverseForOtherMatches }, +) => { + if (queryNode?.type === 'Program' && fileNode?.type === 'Element$1') { + return { + levelMatch: true, // we are not interested in other fields than children of both + queryKeysToTraverseForValidatingMatch: ['templateNodes'], + fileKeysToTraverseForValidatingMatch: ['children'], + fileKeysToTraverseForOtherMatches, + } + } +} diff --git a/packages/core/src/parserSettings/csstree/settings.ts b/packages/core/src/parserSettings/csstree/settings.ts new file mode 100644 index 0000000..9006a04 --- /dev/null +++ b/packages/core/src/parserSettings/csstree/settings.ts @@ -0,0 +1,355 @@ +import { parse } from 'css-tree' +import { + Location, + MatchPosition, + NumericLiteralUtils, + ParserSettings, + PoorNodeType, + ProgramNodeAndBlockNodeUtils, + StringLikeLiteralUtils, + NodesComparatorParameters, + GetUniqueTokensFromStringOrIdentifierNode, +} from '../../types' +import { + decomposeString, + normalizeText, + runNodesComparators, +} from '../../utils' +import { + getIdentifierNodeName, + identifierNodeTypes, + setIdentifierNodeName, + wildcardUtils, +} from './common' +import { traverseAst } from '../../searchStages/traverseAndMatch' +import { beforeWildcardsComparators } from './beforeWildcardsComparators' + +const supportedExtensions = ['html', 'htm'] + +const getProgramNodeFromRootNode = (rootNode: PoorNodeType) => rootNode // root node is program node + +const getProgramBodyFromRootNode = (fileNode: PoorNodeType) => { + return fileNode.templateNodes as PoorNodeType[] +} + +const unwrapExpressionStatement = (node: PoorNodeType) => { + return node as PoorNodeType +} + +const createBlockStatementNode = ( + templateNodes: PoorNodeType[], + position: MatchPosition, +) => ({ + type: 'Program', + templateNodes, + ...position, +}) + +const isNode = (maybeNode: PoorNodeType) => { + return typeof maybeNode?.type === 'string' +} + +const isNodeFieldOptional = (nodeType: string, nodeFieldKey: string) => { + return true +} + +const astPropsToSkip = [ + 'range', + 'sourceSpan', + 'startSourceSpan', + 'endSourceSpan', + 'valueSpan', + 'keySpan', + 'loc', + 'start', + 'end', + 'extra', + 'trailingComments', + 'leadingComments', + 'innerComments', + 'comments', + 'tail', // Support for partial matching of template literals +] + +const parseCode = (code: string, filePath = '') => { + return parseForESLint(code, { filePath, range: true, loc: true }) + .ast as PoorNodeType +} + +type NodeValueSanitizers = Record any>> + +const nodeValuesSanitizers: NodeValueSanitizers = { + ['Text$3']: { + value: normalizeText, + }, +} + +const getSanitizedNodeValue = ( + nodeType: string, + valueKey: string, + value: unknown, +) => { + const valueSanitizer = nodeValuesSanitizers?.[nodeType]?.[valueKey] + + if (valueSanitizer) { + return valueSanitizer(value) + } + + return value +} + +const shouldCompareNode = (node: PoorNodeType) => { + if (node.type === 'Text$3') { + const value: string = getSanitizedNodeValue('Text$3', 'value', node.value) + + const shouldCompare = value.length > 0 + + return shouldCompare + } + + return true +} + +const getNodeType = (node: PoorNodeType) => node.type as string + +const isIdentifierNode = (node: PoorNodeType) => + identifierNodeTypes.includes(getNodeType(node)) + +const stringLikeLiteralUtils: StringLikeLiteralUtils = { + // Text$3 is only pure string node + isStringLikeLiteralNode: (node: PoorNodeType) => node.type === 'Text$3', + getStringLikeLiteralValue: (node: PoorNodeType) => { + return node?.value as string + }, +} + +const numericLiteralUtils: NumericLiteralUtils = { + isNumericLiteralNode: (node: PoorNodeType) => node.type === 'NumericLiteral', + getNumericLiteralValue: (node: PoorNodeType) => + (node.extra as any).raw as string, +} + +const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { + isProgramNode: (node: PoorNodeType) => node.type === 'Program', + isBlockNode: (node: PoorNodeType) => node.type === 'Program', + programNodeBodyKey: 'templateNodes', + blockNodeBodyKey: 'templateNodes', +} + +const getNodePosition: ParserSettings['getNodePosition'] = ( + node: PoorNodeType, +) => ({ + start: ((node?.sourceSpan as any)?.start?.offset as number) ?? 0, + end: ((node?.sourceSpan as any)?.end?.offset as number) ?? 0, + loc: node.loc as unknown as Location, +}) + +const getParseErrorLocation = (e: any) => ({ + line: e.loc?.line ?? 0, + column: e.loc?.column ?? 0, +}) + +const alternativeNodeTypes = { + Identifier: identifierNodeTypes, +} + +/** + * To support wildcards in caa we have to + * - encode wildcard, do it in query text before parsing $$ => a_a_x + * - decode wildcard, traverse parsed query and: a_a_x => $$ + * `$$` is invalid tag name start in all html parsers + */ +const encodedWildcardSequence = 'a_a_x' + +const preprocessQueryCode = (code: string) => { + const queryCode = code.replace(/(\$\$)/g, () => encodedWildcardSequence) + + return queryCode +} + +const replaceEncodedWildcards = (value: string) => + value.replace(/a_\$\$_x/g, () => '$$') + +const postprocessQueryNode = (queryNode: PoorNodeType) => { + traverseAst(queryNode, isNode, { + Declaration: (node) => { + const property = node.property as string + + if (property.includes(encodedWildcardSequence)) { + node.property = replaceEncodedWildcards(property) + } + }, + Identifier: (node) => { + const name = node.name as string + + if (name.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } + }, + IdSelector: (node) => { + const name = node.name as string + + if (name.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } + }, + MediaFeature: (node) => { + const name = node.name as string + + if (name.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } + }, + ClassSelector: (node) => { + const name = node.name as string + + if (name.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } + }, + PseudoClassSelector: (node) => { + const name = node.name as string + + if (name.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } + }, + PseudoElementSelector: (node) => { + const name = node.name as string + + if (name.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } + }, + TypeSelector: (node) => { + const name = node.name as string + + if (name.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } + }, + Function: (node) => { + const name = node.name as string + + if (name.includes(encodedWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } + }, + Number: (node) => { + const value = node.value as string + + if (value.includes(encodedWildcardSequence)) { + node.value = replaceEncodedWildcards(value) + } + }, + Percentage: (node) => { + const value = node.value as string + + if (value.includes(encodedWildcardSequence)) { + node.value = replaceEncodedWildcards(value) + } + }, + String: (node) => { + const value = node.value as string + + if (value.includes(encodedWildcardSequence)) { + node.value = replaceEncodedWildcards(value) + } + }, + Hash: (node) => { + const value = node.value as string + + if (value.includes(encodedWildcardSequence)) { + node.value = replaceEncodedWildcards(value) + } + }, + Url: (node) => { + const value = node.value as string + + if (value.includes(encodedWildcardSequence)) { + node.value = replaceEncodedWildcards(value) + } + }, + }) + + return queryNode +} + +const compareNodesBeforeWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(beforeWildcardsComparators, nodeComparatorParams) +} + +const getUniqueTokensFromStringOrIdentifierNode: GetUniqueTokensFromStringOrIdentifierNode = + ({ queryNode, caseInsensitive, parserSettings }) => { + const MIN_TOKEN_LEN = 2 + + const { anyStringWildcardRegExp } = parserSettings.wildcardUtils + const tokens: string[] = [] + + const valuesToProcess: string[] = [] + + if (queryNode.type === 'TextAttribute') { + valuesToProcess.push(queryNode.name as string) + valuesToProcess.push(queryNode.value as string) + } + + if (queryNode.type === 'Element$1') { + valuesToProcess.push(queryNode.name as string) + } + + if (queryNode.type === 'Text$3') { + valuesToProcess.push(queryNode.value as string) + } + + valuesToProcess + .map((val) => + parserSettings.wildcardUtils.removeWildcardAliasesFromStringLiteral( + val, + ), + ) + .map((val) => decomposeString(val, anyStringWildcardRegExp)) + .flat(1) + .forEach((part) => { + if (part.length >= MIN_TOKEN_LEN) { + tokens.push(caseInsensitive ? part.toLocaleLowerCase() : part) + } + }) + + return tokens + } + +export const angularEslintTemplateParser: ParserSettings = { + supportedExtensions, + parseCode, + isNode, + isIdentifierNode, + astPropsToSkip, + isNodeFieldOptional, + getProgramBodyFromRootNode, + getProgramNodeFromRootNode, + getIdentifierNodeName, + getNodeType, + unwrapExpressionStatement, + createBlockStatementNode, + getSanitizedNodeValue, + identifierNodeTypes, + setIdentifierNodeName, + shouldCompareNode, + wildcardUtils, + compareNodesBeforeWildcardsComparison, + compareNodesAfterWildcardsComparison: () => undefined, + identifierTypeAnnotationFieldName: 'typeAnnotation', + stringLikeLiteralUtils, + numericLiteralUtils, + programNodeAndBlockNodeUtils, + getNodePosition, + getParseErrorLocation, + alternativeNodeTypes, + postprocessQueryNode, + preprocessQueryCode, + getUniqueTokensFromStringOrIdentifierNode, +} + +export default angularEslintTemplateParser diff --git a/packages/core/src/parserSettings/index.ts b/packages/core/src/parserSettings/index.ts index 00a3507..60434df 100644 --- a/packages/core/src/parserSettings/index.ts +++ b/packages/core/src/parserSettings/index.ts @@ -13,4 +13,5 @@ export const parserSettingsMap: Record ParserSettings> = { ['angular-eslint-template-parser']: resolveParserSettings( 'angularEslintTemplateParser', ), + ['csstree']: resolveParserSettings('csstree'), } diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 75d3c5f..aa4244a 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -74,6 +74,7 @@ export type ParserType = | 'esprima' | 'babel-eslint-parser' | 'angular-eslint-template-parser' + | 'csstree' export type FileSystemSearchArgs = { filePaths: string[] diff --git a/yarn.lock b/yarn.lock index a17bfc3..f2ac0e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2519,6 +2519,11 @@ "@types/node" "*" "@types/responselike" "*" +"@types/css-tree@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/css-tree/-/css-tree-2.3.1.tgz#f359cf7ad9318d51b173b923bb8e8d81e21329a1" + integrity sha512-3m636Jz4d9d+lHVMp6FNLsUWQrfOx1xpm1SBxPbQYSNNgXMe+XswcsDeo1ldyULiuzYyWKk1kmvkLTgNq+215Q== + "@types/dedent@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@types/dedent/-/dedent-0.7.0.tgz#155f339ca404e6dd90b9ce46a3f78fd69ca9b050" @@ -4403,6 +4408,14 @@ css-box-model@1.2.1: dependencies: tiny-invariant "^1.0.6" +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -7307,6 +7320,11 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + memoize-one@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" @@ -8860,6 +8878,11 @@ socks@^2.3.3: ip "^1.1.5" smart-buffer "^4.2.0" +source-map-js@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-support@^0.5.6, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" From e1b6c850c40a8accf3feb80c00a39128448b5b01 Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Wed, 28 Jun 2023 21:19:29 +0200 Subject: [PATCH 011/110] wip: css support --- .../CSS/matchCodePatterns/basic.test.ts | 361 ++++++++++ .../CSS/matchCodePatterns/wildcards.test.ts | 621 ++++++++++++++++++ .../__tests__/CSS/other/parseQuery.test.ts | 41 ++ .../CSS/other/searchWithContext.test.ts | 139 ++++ packages/core/jest.config.js | 10 + packages/core/jest/css-tree.setup.ts | 4 + packages/core/package.json | 1 + packages/core/src/parseQuery.ts | 24 +- .../beforeWildcardsComparators.ts | 4 +- .../matchMultilineQueriesNodesComparator.ts | 2 +- .../csstree/afterWildcardsComparators.ts | 6 + .../csstree/beforeWildcardsComparators.ts | 43 +- .../matchMultilineQueriesNodesComparator.ts | 19 - .../csstree/matchRuleWithoutSelector.ts | 25 + .../matchWildcardInDeclarationProperty.ts | 60 ++ .../csstree/matchWildcardsInDimension.ts | 71 ++ .../src/parserSettings/csstree/settings.ts | 311 ++++----- packages/core/src/parserSettings/index.ts | 2 +- packages/core/src/types.ts | 2 +- packages/vscode/src/SearchManager.ts | 1 + packages/vscode/src/StateManager.ts | 2 +- packages/vscode/src/utils.ts | 1 + .../components/QueryEditor.tsx | 1 + .../Sidebar/components/SearchSettings.tsx | 8 + yarn.lock | 22 + 25 files changed, 1577 insertions(+), 204 deletions(-) create mode 100644 packages/core/__tests__/CSS/matchCodePatterns/basic.test.ts create mode 100644 packages/core/__tests__/CSS/matchCodePatterns/wildcards.test.ts create mode 100644 packages/core/__tests__/CSS/other/parseQuery.test.ts create mode 100644 packages/core/__tests__/CSS/other/searchWithContext.test.ts create mode 100644 packages/core/jest/css-tree.setup.ts create mode 100644 packages/core/src/parserSettings/csstree/afterWildcardsComparators.ts delete mode 100644 packages/core/src/parserSettings/csstree/matchMultilineQueriesNodesComparator.ts create mode 100644 packages/core/src/parserSettings/csstree/matchRuleWithoutSelector.ts create mode 100644 packages/core/src/parserSettings/csstree/matchWildcardInDeclarationProperty.ts create mode 100644 packages/core/src/parserSettings/csstree/matchWildcardsInDimension.ts diff --git a/packages/core/__tests__/CSS/matchCodePatterns/basic.test.ts b/packages/core/__tests__/CSS/matchCodePatterns/basic.test.ts new file mode 100644 index 0000000..fe9fdd5 --- /dev/null +++ b/packages/core/__tests__/CSS/matchCodePatterns/basic.test.ts @@ -0,0 +1,361 @@ +import { searchInStrings } from '../../../src/searchInStrings' + +describe('Basic queries', () => { + it('Should exact match rule with selector', () => { + const fileContent = ` + p { + background-color: red; + } + ` + const queries = [fileContent] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should exact match simple declaration without wrapping block', () => { + const fileContent = ` + p { + background-color: red; + } + ` + + const queries = [`background-color: red;`] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should exact match simple rule without selector', () => { + const fileContent = ` + p { + background-color: red; + } + ` + + const queries = [`{ background-color: red; }`] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match rule with function property', () => { + const fileContent = ` + .class { + background-color: linear-gradient(#e66465, #9198e5); + display:flex + } + ` + + const queries = [ + ` + .class { + background-color: linear-gradient(#e66465, #9198e5); + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match atrule', () => { + const fileContent = ` + @media (min-width: 300px) { + #main { + font-weight: bold + } + } + ` + + const queries = [ + ` + @media (min-width: 300px) { + #main { + font-weight: bold + } + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match rule inside atrule', () => { + const fileContent = ` + @media (min-width: 300px) { + #main { + font-weight: bold + } + } + ` + + const queries = [ + ` + { + font-weight: bold + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match selector with combinator', () => { + const fileContent = ` + ul > li { + margin-left: 10px; + } + ` + + const queries = [ + ` + ul > li { + + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match declaration with dimension', () => { + const fileContent = ` + ul > li { + margin-left: 10vw; + } + ` + + const queries = [ + ` + margin-left: 10vw; + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match calc function and partial selector', () => { + const fileContent = ` + div, p, span { + margin-left: calc(100vw - 90%); + } + ` + + const queries = [ + ` + p { + margin-left: calc(100vw - 90%); + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should not match partial selector in exact mode', () => { + const fileContent = ` + div, p, span { + margin-left: calc(100vw - 90%); + } + ` + + const queries = [ + ` + p { + margin-left: calc(100vw - 90%); + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Should match url', () => { + const fileContent = ` + div { + background: url("http://image.com") + } + ` + + const queries = [ + ` + div { + background: url("http://image.com") + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match subset of multi value declaration ', () => { + const fileContent = ` + div { + padding: 10px 8px 4px + } + ` + + const queries = [ + ` + div { + padding: 10px 4px + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) +}) diff --git a/packages/core/__tests__/CSS/matchCodePatterns/wildcards.test.ts b/packages/core/__tests__/CSS/matchCodePatterns/wildcards.test.ts new file mode 100644 index 0000000..735ee87 --- /dev/null +++ b/packages/core/__tests__/CSS/matchCodePatterns/wildcards.test.ts @@ -0,0 +1,621 @@ +import { searchInStrings } from '../../../src/searchInStrings' + +describe('Wildcard queries', () => { + it('Should match wildcard in type selector', () => { + const fileContent = ` + p { + background-color: red; + } + ` + const queries = [ + ` + $$ { + background-color: red; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in class name', () => { + const fileContent = ` + .someClass { + background-color: red; + } + ` + const queries = [ + ` + .some$$ { + background-color: red; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in id selector name', () => { + const fileContent = ` + #someId { + background-color: red; + } + ` + const queries = [ + ` + #some$$ { + background-color: red; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in declaration property name', () => { + const fileContent = ` + p { + background-color: red; + } + ` + const queries = [ + ` + p { + background-$$: red; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in property color value', () => { + const fileContent = ` + p { + background-color: red; + } + ` + const queries = [ + ` + p { + background-color: $$; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in property dimension unit', () => { + const fileContent = ` + p { + margin-left: 10em; + } + ` + const queries = [ + ` + p { + margin-left: 10$$; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in property dimension value', () => { + const fileContent = ` + p { + margin-left: 10em; + } + ` + const queries = [ + ` + p { + margin-left: 0x0em; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in property dimension unit and value', () => { + const fileContent = ` + p { + margin-left: 10em; + } + ` + const queries = [ + ` + p { + margin-left: 0x0$$ + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in media query identifier', () => { + const fileContent = ` + @media screen and (min-width: 480px) { + body { + background-color: lightgreen; + } + } + ` + const queries = [ + ` + @media $$ and (min-width: 480px) { + body { + background-color: lightgreen; + } + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in media query media feature name', () => { + const fileContent = ` + @media screen and (min-width: 480px) { + body { + background-color: lightgreen; + } + } + ` + const queries = [ + ` + @media screen and ($$: 480px) { + body { + background-color: lightgreen; + } + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match numeric wildcard in media query media feature dimension value', () => { + const fileContent = ` + @media screen and (min-width: 480px) { + body { + background-color: lightgreen; + } + } + ` + const queries = [ + ` + @media screen and (min-width: 0x0px) { + body { + background-color: lightgreen; + } + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in keyframes name', () => { + const fileContent = ` + @keyframes slidein { + from { + transform: translateX(0%); + } + + to { + transform: translateX(100%); + } + } + ` + const queries = [ + ` + @keyframes $$ { + from { + transform: translateX(0%); + } + + to { + transform: translateX(100%); + } + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in keyframes type selector', () => { + const fileContent = ` + @keyframes slidein { + from { + transform: translateX(0%); + } + + to { + transform: translateX(100%); + } + } + ` + const queries = [ + ` + @keyframes slidein { + $$ { + transform: translateX(0%); + } + + to { + transform: translateX(100%); + } + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in keyframes percentage selector', () => { + const fileContent = ` + @keyframes slidein { + 0% { + transform: translateX(0%); + } + + 100% { + transform: translateX(100%); + } + } + ` + const queries = [ + ` + @keyframes slidein { + 0% { + transform: translateX(0%); + } + + 0x0% { + transform: translateX(100%); + } + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in url function value 1', () => { + const fileContent = ` + p { + background: url("some-path") + } + ` + const queries = [ + ` + p { + background: url($$) + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in url function value 2', () => { + const fileContent = ` + p { + background: url("some-path") + } + ` + const queries = [ + ` + p { + background: url("$$") + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match wildcard in function name', () => { + const fileContent = ` + p { + background: linear-gradient(0px) + } + ` + const queries = [ + ` + p { + background: $$(0px) + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match color hash with string wildcard', () => { + const fileContent = ` + p { + background: #000 + } + ` + const queries = [ + ` + p { + background: $$ + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) + + it('Should match color hash with numeric wildcard', () => { + const fileContent = ` + p { + background: #000 + } + ` + const queries = [ + ` + p { + background: #0x0 + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) +}) diff --git a/packages/core/__tests__/CSS/other/parseQuery.test.ts b/packages/core/__tests__/CSS/other/parseQuery.test.ts new file mode 100644 index 0000000..ff95069 --- /dev/null +++ b/packages/core/__tests__/CSS/other/parseQuery.test.ts @@ -0,0 +1,41 @@ +import { getUniqueTokens, extractQueryNode } from '../../../src/parseQuery' +import { getParserSettings } from '../../utils' +import { PoorNodeType } from '../../../src/types' + +describe('parse query', () => { + const parserSettings = getParserSettings() + + const { parseCode } = parserSettings + + const preprocessQueryCode = parserSettings.preprocessQueryCode as ( + s: string, + ) => string + + const postprocessQueryNode = parserSettings.postprocessQueryNode as ( + node: PoorNodeType, + ) => PoorNodeType + + it('should get unique tokens', () => { + const queryCode = ` + p, .class { + width: 120px; + background-color: $$; + height: 0x0%; + } + ` + + const { queryNode } = extractQueryNode( + postprocessQueryNode(parseCode(preprocessQueryCode(queryCode))), + parserSettings, + ) + + const uniqueTokens = [...getUniqueTokens(queryNode, false, parserSettings)] + + expect(uniqueTokens).toMatchObject([ + 'class', + 'width', + 'background-color', + 'height', + ]) + }) +}) diff --git a/packages/core/__tests__/CSS/other/searchWithContext.test.ts b/packages/core/__tests__/CSS/other/searchWithContext.test.ts new file mode 100644 index 0000000..4d8e7ba --- /dev/null +++ b/packages/core/__tests__/CSS/other/searchWithContext.test.ts @@ -0,0 +1,139 @@ +import { searchInStrings } from '../../../src/searchInStrings' + +describe('Wildcard queries', () => { + it('Should match wildcard ref between class rules', () => { + const fileContent = ` + .firstClass { + background-color: red; + } + + .otherClassName { + display: none; + } + ` + const queries = [ + ` + .first$$_classRef {} + + .other$$_classRef_Name {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.stringAliasesMap['classRef'].aliasValue).toBe( + 'Class', + ) + }) + + it('Should not match wildcard ref between class rules when they are different', () => { + const fileContent = ` + .firstClass { + background-color: red; + } + + .otherXXXXName { + display: none; + } + ` + const queries = [ + ` + .first$$_classRef {} + + .other$$_classRef_Name {} + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) + + it('Should match wildcard ref between class name and color', () => { + const fileContent = ` + .bgRed { + background-color: red; + } + ` + const queries = [ + ` + .bg$$_colorRef { + background-color: $$_colorRef; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + + expect(matches[0].aliases.stringAliasesMap['colorRef'].aliasValue).toBe( + 'Red', + ) + }) + + it('Should not match wildcard ref between class name and color for case sensitive search', () => { + const fileContent = ` + .bgRed { + background-color: red; + } + ` + const queries = [ + ` + .bg$$_colorRef { + background-color: $$_colorRef; + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'include', + caseInsensitive: false, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(0) + }) +}) diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js index 705fc74..81b7ad5 100644 --- a/packages/core/jest.config.js +++ b/packages/core/jest.config.js @@ -16,6 +16,7 @@ const typeScriptParserTestFiles = [ ] const htmlParserTestFiles = ['/__tests__/HTML/**/*.test.ts'] +const cssParserTestFiles = ['/__tests__/CSS/**/*.test.ts'] module.exports = { testPathIgnorePatterns: [ @@ -143,5 +144,14 @@ module.exports = { '/jest/angular-eslint-template-parser.setup.ts', ], }, + { + ...sharedConfig, + displayName: { name: 'css-tree', color: 'blue' }, + testMatch: cssParserTestFiles, + setupFiles: [ + '/jest/shared.setup.ts', + '/jest/css-tree.setup.ts', + ], + }, ], } diff --git a/packages/core/jest/css-tree.setup.ts b/packages/core/jest/css-tree.setup.ts new file mode 100644 index 0000000..014a917 --- /dev/null +++ b/packages/core/jest/css-tree.setup.ts @@ -0,0 +1,4 @@ +global.testSettings = { + parserType: 'css-tree', + isTraversal: false, +} diff --git a/packages/core/package.json b/packages/core/package.json index 2982eb1..f1c083e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -88,6 +88,7 @@ "test:espree": "jest --selectProjects=espree", "test:espree:traversal": "jest --selectProjects=espree:traversal", "test:angular-eslint-template-parser": "jest --selectProjects=angular-eslint-template-parser", + "test:css-tree": "jest --selectProjects=css-tree", "test:circular": "dpdm --exit-code circular:1 --tree=false --warning=false './src/**'", "test:setup": "node ./tools/getFixtures.js", "lint": "eslint --ext .js,.ts src", diff --git a/packages/core/src/parseQuery.ts b/packages/core/src/parseQuery.ts index f21889f..de64fb1 100644 --- a/packages/core/src/parseQuery.ts +++ b/packages/core/src/parseQuery.ts @@ -69,14 +69,18 @@ export const getUniqueTokens = ( parserSettings: ParserSettings, tokens: Set = new Set(), ) => { - const { numericLiteralUtils } = parserSettings + const { numericLiteralUtils, getUniqueTokensFromStringOrIdentifierNode } = + parserSettings - const tokensFromStringsOrIdNode = - defaultGetUniqueTokensFromStringOrIdentifierNode({ - queryNode, - caseInsensitive, - parserSettings, - }) + const getUniqueTokensFn = + getUniqueTokensFromStringOrIdentifierNode ?? + defaultGetUniqueTokensFromStringOrIdentifierNode + + const tokensFromStringsOrIdNode = getUniqueTokensFn({ + queryNode, + caseInsensitive, + parserSettings, + }) tokensFromStringsOrIdNode.forEach(tokens.add, tokens) @@ -120,10 +124,10 @@ export const getUniqueTokens = ( } export const extractQueryNode = ( - fileNode: PoorNodeType, + topLevelQueryNode: PoorNodeType, parserSettings: ParserSettings, ) => { - const queryBody = parserSettings.getProgramBodyFromRootNode(fileNode) + const queryBody = parserSettings.getProgramBodyFromRootNode(topLevelQueryNode) if (queryBody.length === 0) { throw new Error('Query is empty or code was not parsed correctly') @@ -136,7 +140,7 @@ export const extractQueryNode = ( } } - const position = parserSettings.getNodePosition(fileNode) + const position = parserSettings.getNodePosition(topLevelQueryNode) return { queryNode: parserSettings.createBlockStatementNode(queryBody, position), diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts index 4915afe..d436f2d 100644 --- a/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/beforeWildcardsComparators.ts @@ -1,6 +1,6 @@ import { NodesComparator } from '../../types' import { createMatchWildcardsInPropValueNodesComparator } from '../nodeComparatorFactories/Other/matchWildcardsInPropValueNodes' -import { matchWildcardsInPropValueNodesComparator } from './matchMultilineQueriesNodesComparator' +import { matchMultilineQueriesNodesComparator } from './matchMultilineQueriesNodesComparator' const matchWildcardsInTextAttributeNodesComparator = createMatchWildcardsInPropValueNodesComparator({ @@ -20,5 +20,5 @@ const matchWildcardsInElement$1NodesComparator = export const beforeWildcardsComparators: NodesComparator[] = [ matchWildcardsInTextAttributeNodesComparator, matchWildcardsInElement$1NodesComparator, - matchWildcardsInPropValueNodesComparator, + matchMultilineQueriesNodesComparator, ] diff --git a/packages/core/src/parserSettings/angularEslintTemplateParser/matchMultilineQueriesNodesComparator.ts b/packages/core/src/parserSettings/angularEslintTemplateParser/matchMultilineQueriesNodesComparator.ts index 2903527..7e349aa 100644 --- a/packages/core/src/parserSettings/angularEslintTemplateParser/matchMultilineQueriesNodesComparator.ts +++ b/packages/core/src/parserSettings/angularEslintTemplateParser/matchMultilineQueriesNodesComparator.ts @@ -3,7 +3,7 @@ import { NodesComparator } from '../../types' /* * Support performing multiline html queries by changing query Program node into ElementNode */ -export const matchWildcardsInPropValueNodesComparator: NodesComparator = ( +export const matchMultilineQueriesNodesComparator: NodesComparator = ( { queryNode, fileNode }, _, { fileKeysToTraverseForOtherMatches }, diff --git a/packages/core/src/parserSettings/csstree/afterWildcardsComparators.ts b/packages/core/src/parserSettings/csstree/afterWildcardsComparators.ts new file mode 100644 index 0000000..20c7a78 --- /dev/null +++ b/packages/core/src/parserSettings/csstree/afterWildcardsComparators.ts @@ -0,0 +1,6 @@ +import { NodesComparator } from '../../types' +import { matchRuleWithoutSelector } from './matchRuleWithoutSelector' + +export const afterWildcardsComparators: NodesComparator[] = [ + matchRuleWithoutSelector, +] diff --git a/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts index 4915afe..cc25991 100644 --- a/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts +++ b/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts @@ -1,24 +1,33 @@ import { NodesComparator } from '../../types' import { createMatchWildcardsInPropValueNodesComparator } from '../nodeComparatorFactories/Other/matchWildcardsInPropValueNodes' -import { matchWildcardsInPropValueNodesComparator } from './matchMultilineQueriesNodesComparator' +import { matchWildcardInDeclarationProperty } from './matchWildcardInDeclarationProperty' +import { matchWildcardsInDimension } from './matchWildcardsInDimension' -const matchWildcardsInTextAttributeNodesComparator = - createMatchWildcardsInPropValueNodesComparator({ - nodeType: 'TextAttribute', - keysToTraverse: [], - // Order of keys definition does matter for matchContext! In case someone would use the same alias in eg. prop and value - keysWithWildcards: ['name', 'value'], - }) +const nodeTypesWithNameAndChildren = ['Function'] -const matchWildcardsInElement$1NodesComparator = - createMatchWildcardsInPropValueNodesComparator({ - nodeType: 'Element$1', - keysToTraverse: ['attributes', 'children'], - keysWithWildcards: ['name'], - }) +const matchWildcardsInNodeTypesWithNameAndChildrenNodesComparator = + nodeTypesWithNameAndChildren.map((nodeType) => + createMatchWildcardsInPropValueNodesComparator({ + nodeType, + keysToTraverse: ['children'], + keysWithWildcards: ['name'], + }), + ) + +const nodeTypesWithNameAndValue = ['MediaFeature'] + +const matchWildcardsInNodeTypesWithNameAndValueNodesComparator = + nodeTypesWithNameAndValue.map((nodeType) => + createMatchWildcardsInPropValueNodesComparator({ + nodeType, + keysToTraverse: ['value'], + keysWithWildcards: ['name'], + }), + ) export const beforeWildcardsComparators: NodesComparator[] = [ - matchWildcardsInTextAttributeNodesComparator, - matchWildcardsInElement$1NodesComparator, - matchWildcardsInPropValueNodesComparator, + ...matchWildcardsInNodeTypesWithNameAndChildrenNodesComparator, + ...matchWildcardsInNodeTypesWithNameAndValueNodesComparator, + matchWildcardInDeclarationProperty, + matchWildcardsInDimension, ] diff --git a/packages/core/src/parserSettings/csstree/matchMultilineQueriesNodesComparator.ts b/packages/core/src/parserSettings/csstree/matchMultilineQueriesNodesComparator.ts deleted file mode 100644 index 2903527..0000000 --- a/packages/core/src/parserSettings/csstree/matchMultilineQueriesNodesComparator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NodesComparator } from '../../types' - -/* - * Support performing multiline html queries by changing query Program node into ElementNode - */ -export const matchWildcardsInPropValueNodesComparator: NodesComparator = ( - { queryNode, fileNode }, - _, - { fileKeysToTraverseForOtherMatches }, -) => { - if (queryNode?.type === 'Program' && fileNode?.type === 'Element$1') { - return { - levelMatch: true, // we are not interested in other fields than children of both - queryKeysToTraverseForValidatingMatch: ['templateNodes'], - fileKeysToTraverseForValidatingMatch: ['children'], - fileKeysToTraverseForOtherMatches, - } - } -} diff --git a/packages/core/src/parserSettings/csstree/matchRuleWithoutSelector.ts b/packages/core/src/parserSettings/csstree/matchRuleWithoutSelector.ts new file mode 100644 index 0000000..b6e2575 --- /dev/null +++ b/packages/core/src/parserSettings/csstree/matchRuleWithoutSelector.ts @@ -0,0 +1,25 @@ +import { NodesComparator, PoorNodeType } from '../../types' + +/* + * Skip comparing `prelude` for rules where prelude is empty 'Raw' + * Q: {background-color: red} C: p {background-color: red} + */ +export const matchRuleWithoutSelector: NodesComparator = ( + { queryNode, fileNode }, + _, + { fileKeysToTraverseForOtherMatches }, +) => { + if ( + queryNode?.type === 'Rule' && + fileNode?.type === 'Rule' && + (queryNode?.prelude as PoorNodeType)?.type === 'Raw' && + (queryNode?.prelude as PoorNodeType)?.value === '' + ) { + return { + levelMatch: true, + queryKeysToTraverseForValidatingMatch: ['block'], + fileKeysToTraverseForValidatingMatch: ['block'], + fileKeysToTraverseForOtherMatches, + } + } +} diff --git a/packages/core/src/parserSettings/csstree/matchWildcardInDeclarationProperty.ts b/packages/core/src/parserSettings/csstree/matchWildcardInDeclarationProperty.ts new file mode 100644 index 0000000..1484ff9 --- /dev/null +++ b/packages/core/src/parserSettings/csstree/matchWildcardInDeclarationProperty.ts @@ -0,0 +1,60 @@ +import { NodesComparator, PoorNodeType } from '../../types' +import { matchStringOrIdentifierAliases } from '../../searchStages/matchStringOrIdentifierAliases' + +/* + * Adds support for matching wildcard in "Declaration" property key + * Q: {background-$$: red} C: p {background-color: red} + */ +export const matchWildcardInDeclarationProperty: NodesComparator = ( + { queryNode, fileNode, searchSettings, matchContext }, + _, + { fileKeysToTraverseForOtherMatches }, +) => { + if (queryNode?.type === 'Declaration' && fileNode?.type === 'Declaration') { + const { wildcardUtils } = searchSettings.parserSettings + const { caseInsensitive, mode } = searchSettings + const isExact = mode === 'exact' + + // Important modifier is optional for query in include mode + let levelMatch = isExact + ? queryNode.important === fileNode.important + : queryNode.important + ? Boolean(fileNode.important) + : true + + const queryNodeStringContent = queryNode.property as string + + const fileNodeStringContent = fileNode.property as string + + const wildcardsMeta = wildcardUtils.getStringWildcardsFromString( + queryNodeStringContent, + ) + + if (wildcardsMeta.length > 0) { + levelMatch = + levelMatch && + matchStringOrIdentifierAliases({ + queryValue: queryNodeStringContent, + fileValue: fileNodeStringContent, + wildcardsMeta, + matchContext, + wildcardUtils, + caseInsensitive, + }) + } else { + /** + * If there are no wildcards in given prop, compare prop values directly + */ + levelMatch = + levelMatch && queryNodeStringContent === fileNodeStringContent + } + + // We always want to return here, otherwise generic string wildcard matching would take over and match incorrectly + return { + levelMatch, + queryKeysToTraverseForValidatingMatch: ['value'], + fileKeysToTraverseForValidatingMatch: ['value'], + fileKeysToTraverseForOtherMatches, + } + } +} diff --git a/packages/core/src/parserSettings/csstree/matchWildcardsInDimension.ts b/packages/core/src/parserSettings/csstree/matchWildcardsInDimension.ts new file mode 100644 index 0000000..37f4852 --- /dev/null +++ b/packages/core/src/parserSettings/csstree/matchWildcardsInDimension.ts @@ -0,0 +1,71 @@ +import { NodesComparator, PoorNodeType } from '../../types' +import { matchStringOrIdentifierAliases } from '../../searchStages/matchStringOrIdentifierAliases' + +/* + * Adds support for matching wildcard in "Dimension" unit and value + * Q: {width: 0x0px} C: {width: 5px} + * Q: {width: 5$$} C: {width: 5px} + * Q: {width: 0x0$$} C: {width: 5px} + */ +export const matchWildcardsInDimension: NodesComparator = ( + { queryNode, fileNode, searchSettings, matchContext }, + _, + { fileKeysToTraverseForOtherMatches, log }, +) => { + if (queryNode?.type === 'Dimension' && fileNode?.type === 'Dimension') { + log( + 'Compare dimension nodes', + queryNode.value as string, + queryNode.unit as string, + fileNode.value as string, + fileNode.unit as string, + ) + + const { wildcardUtils } = searchSettings.parserSettings + const { caseInsensitive } = searchSettings + + let levelMatch = true + + const queryNodeStringContent = queryNode.unit as string + + const fileNodeStringContent = fileNode.unit as string + + const wildcardsMeta = wildcardUtils.getStringWildcardsFromString( + queryNodeStringContent, + ) + + if (wildcardsMeta.length > 0) { + levelMatch = + levelMatch && + matchStringOrIdentifierAliases({ + queryValue: queryNodeStringContent, + fileValue: fileNodeStringContent, + wildcardsMeta, + matchContext, + wildcardUtils, + caseInsensitive, + }) + } else { + /** + * If there are no wildcards in given prop, compare prop values directly + */ + levelMatch = + levelMatch && queryNodeStringContent === fileNodeStringContent + } + + /** + * Compare values only if there is no numeric wildcard in query + */ + if (queryNode.value !== wildcardUtils.numericWildcard) { + levelMatch = levelMatch && queryNode.value === fileNode.value + } + + // We always want to return here, otherwise generic string wildcard matching would take over and match incorrectly + return { + levelMatch, + queryKeysToTraverseForValidatingMatch: [], + fileKeysToTraverseForValidatingMatch: [], + fileKeysToTraverseForOtherMatches, + } + } +} diff --git a/packages/core/src/parserSettings/csstree/settings.ts b/packages/core/src/parserSettings/csstree/settings.ts index 9006a04..78cf00b 100644 --- a/packages/core/src/parserSettings/csstree/settings.ts +++ b/packages/core/src/parserSettings/csstree/settings.ts @@ -1,4 +1,4 @@ -import { parse } from 'css-tree' +import { parse, ParseOptions, toPlainObject } from 'css-tree' import { Location, MatchPosition, @@ -23,13 +23,14 @@ import { } from './common' import { traverseAst } from '../../searchStages/traverseAndMatch' import { beforeWildcardsComparators } from './beforeWildcardsComparators' +import { afterWildcardsComparators } from '../cssTree/afterWildcardsComparators' -const supportedExtensions = ['html', 'htm'] +const supportedExtensions = ['css'] const getProgramNodeFromRootNode = (rootNode: PoorNodeType) => rootNode // root node is program node const getProgramBodyFromRootNode = (fileNode: PoorNodeType) => { - return fileNode.templateNodes as PoorNodeType[] + return fileNode.children as PoorNodeType[] } const unwrapExpressionStatement = (node: PoorNodeType) => { @@ -37,11 +38,11 @@ const unwrapExpressionStatement = (node: PoorNodeType) => { } const createBlockStatementNode = ( - templateNodes: PoorNodeType[], + children: PoorNodeType[], position: MatchPosition, ) => ({ - type: 'Program', - templateNodes, + type: 'Block', + children, ...position, }) @@ -53,33 +54,31 @@ const isNodeFieldOptional = (nodeType: string, nodeFieldKey: string) => { return true } -const astPropsToSkip = [ - 'range', - 'sourceSpan', - 'startSourceSpan', - 'endSourceSpan', - 'valueSpan', - 'keySpan', - 'loc', - 'start', - 'end', - 'extra', - 'trailingComments', - 'leadingComments', - 'innerComments', - 'comments', - 'tail', // Support for partial matching of template literals -] +const astPropsToSkip = ['loc'] + +const parseCode = (code: string) => { + const sharedOptions: ParseOptions = { + parseAtrulePrelude: true, + parseRulePrelude: true, + parseValue: true, + positions: true, + } -const parseCode = (code: string, filePath = '') => { - return parseForESLint(code, { filePath, range: true, loc: true }) - .ast as PoorNodeType + if (code.includes('{')) { + return toPlainObject( + parse(code, { ...sharedOptions, context: 'stylesheet' }), + ) as unknown as PoorNodeType + } else { + return toPlainObject( + parse(code, { ...sharedOptions, context: 'declarationList' }), + ) as unknown as PoorNodeType + } } type NodeValueSanitizers = Record any>> const nodeValuesSanitizers: NodeValueSanitizers = { - ['Text$3']: { + ['Raw']: { value: normalizeText, }, } @@ -99,8 +98,12 @@ const getSanitizedNodeValue = ( } const shouldCompareNode = (node: PoorNodeType) => { - if (node.type === 'Text$3') { - const value: string = getSanitizedNodeValue('Text$3', 'value', node.value) + if (node.type === 'WhiteSpace') { + return false + } + + if (node.type === 'Raw') { + const value: string = getSanitizedNodeValue('Raw', 'value', node.value) const shouldCompare = value.length > 0 @@ -115,32 +118,44 @@ const getNodeType = (node: PoorNodeType) => node.type as string const isIdentifierNode = (node: PoorNodeType) => identifierNodeTypes.includes(getNodeType(node)) +const stringLikeNodeTypes = [ + 'TypeSelector', + 'Raw', + 'ClassSelector', + 'Identifier', + 'IdSelector', + 'Url', +] + const stringLikeLiteralUtils: StringLikeLiteralUtils = { - // Text$3 is only pure string node - isStringLikeLiteralNode: (node: PoorNodeType) => node.type === 'Text$3', + // Raw is only pure string node + isStringLikeLiteralNode: (node: PoorNodeType) => + stringLikeNodeTypes.includes(node.type as string), getStringLikeLiteralValue: (node: PoorNodeType) => { - return node?.value as string + return (node?.value as string) || (node?.name as string) }, } +const pureNumericNodes = ['Percentage', 'Number', 'Hash'] + const numericLiteralUtils: NumericLiteralUtils = { - isNumericLiteralNode: (node: PoorNodeType) => node.type === 'NumericLiteral', - getNumericLiteralValue: (node: PoorNodeType) => - (node.extra as any).raw as string, + isNumericLiteralNode: (node: PoorNodeType) => + pureNumericNodes.includes(node.type as string), + getNumericLiteralValue: (node: PoorNodeType) => node.value as string, } const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { - isProgramNode: (node: PoorNodeType) => node.type === 'Program', - isBlockNode: (node: PoorNodeType) => node.type === 'Program', - programNodeBodyKey: 'templateNodes', - blockNodeBodyKey: 'templateNodes', + isProgramNode: (node: PoorNodeType) => node.type === 'StyleSheet', + isBlockNode: (node: PoorNodeType) => node.type === 'Block', + programNodeBodyKey: 'children', + blockNodeBodyKey: 'children', } const getNodePosition: ParserSettings['getNodePosition'] = ( node: PoorNodeType, ) => ({ - start: ((node?.sourceSpan as any)?.start?.offset as number) ?? 0, - end: ((node?.sourceSpan as any)?.end?.offset as number) ?? 0, + start: ((node?.loc as any)?.start?.offset as number) ?? 0, + end: ((node?.loc as any)?.end?.offset as number) ?? 0, loc: node.loc as unknown as Location, }) @@ -157,120 +172,107 @@ const alternativeNodeTypes = { * To support wildcards in caa we have to * - encode wildcard, do it in query text before parsing $$ => a_a_x * - decode wildcard, traverse parsed query and: a_a_x => $$ + * - Same for numeric wildcard 0x0 -> 00000000 // 0{8} * `$$` is invalid tag name start in all html parsers */ -const encodedWildcardSequence = 'a_a_x' +const encodedStringWildcardSequence = 'a_a_x' +const encodedNumericWildcardSequence = '00000000' const preprocessQueryCode = (code: string) => { - const queryCode = code.replace(/(\$\$)/g, () => encodedWildcardSequence) + const queryCode = code + .replace(/(\$\$)/g, () => encodedStringWildcardSequence) + .replace(/0x0/g, encodedNumericWildcardSequence) return queryCode } const replaceEncodedWildcards = (value: string) => - value.replace(/a_\$\$_x/g, () => '$$') + value.replace(/a_a_x/g, () => '$$').replace(/0{8}/g, '0x0') + +const stringNodeTypes = { + withName: [ + 'Identifier', + 'IdSelector', + 'MediaFeature', + 'ClassSelector', + 'PseudoClassSelector', + 'PseudoElementSelector', + 'TypeSelector', + 'Function', + 'Combinator', + ], + withValue: ['String', 'Url'], + withProperty: ['Declaration'], +} + +const postprocessQueryNodeWithName = (node: PoorNodeType) => { + const name = node.name as string + + if (name.includes(encodedStringWildcardSequence)) { + node.name = replaceEncodedWildcards(name) + } +} + +const postprocessQueryNodeWithValue = (node: PoorNodeType) => { + const value = node.value as string + + if ( + value.includes(encodedStringWildcardSequence) || + value.includes(encodedNumericWildcardSequence) + ) { + node.value = replaceEncodedWildcards(value) + } +} + +const postprocessQueryNodeWithProperty = (node: PoorNodeType) => { + const property = node.property as string + + if (property.includes(encodedStringWildcardSequence)) { + node.property = replaceEncodedWildcards(property) + } +} + +const createVisitorsForNodeTypes = ( + types: string[], + visitorFn: (node: PoorNodeType) => void, +) => + types.reduce( + (visitorsMap, nodeType) => ({ + ...visitorsMap, + [nodeType]: visitorFn, + }), + {}, + ) + +const postprocessVisitors = { + ...createVisitorsForNodeTypes( + stringNodeTypes.withName, + postprocessQueryNodeWithName, + ), + ...createVisitorsForNodeTypes( + stringNodeTypes.withProperty, + postprocessQueryNodeWithProperty, + ), + ...createVisitorsForNodeTypes( + [...stringNodeTypes.withValue, ...pureNumericNodes], + postprocessQueryNodeWithValue, + ), + Dimension: (node: PoorNodeType) => { + const unit = node.unit as string + const value = node.value as string + + if (unit.includes(encodedStringWildcardSequence)) { + node.unit = replaceEncodedWildcards(unit) + } + + if (value === encodedNumericWildcardSequence) { + node.value = replaceEncodedWildcards(value) + } + }, +} const postprocessQueryNode = (queryNode: PoorNodeType) => { - traverseAst(queryNode, isNode, { - Declaration: (node) => { - const property = node.property as string - - if (property.includes(encodedWildcardSequence)) { - node.property = replaceEncodedWildcards(property) - } - }, - Identifier: (node) => { - const name = node.name as string - - if (name.includes(encodedWildcardSequence)) { - node.name = replaceEncodedWildcards(name) - } - }, - IdSelector: (node) => { - const name = node.name as string - - if (name.includes(encodedWildcardSequence)) { - node.name = replaceEncodedWildcards(name) - } - }, - MediaFeature: (node) => { - const name = node.name as string - - if (name.includes(encodedWildcardSequence)) { - node.name = replaceEncodedWildcards(name) - } - }, - ClassSelector: (node) => { - const name = node.name as string - - if (name.includes(encodedWildcardSequence)) { - node.name = replaceEncodedWildcards(name) - } - }, - PseudoClassSelector: (node) => { - const name = node.name as string - - if (name.includes(encodedWildcardSequence)) { - node.name = replaceEncodedWildcards(name) - } - }, - PseudoElementSelector: (node) => { - const name = node.name as string - - if (name.includes(encodedWildcardSequence)) { - node.name = replaceEncodedWildcards(name) - } - }, - TypeSelector: (node) => { - const name = node.name as string - - if (name.includes(encodedWildcardSequence)) { - node.name = replaceEncodedWildcards(name) - } - }, - Function: (node) => { - const name = node.name as string - - if (name.includes(encodedWildcardSequence)) { - node.name = replaceEncodedWildcards(name) - } - }, - Number: (node) => { - const value = node.value as string - - if (value.includes(encodedWildcardSequence)) { - node.value = replaceEncodedWildcards(value) - } - }, - Percentage: (node) => { - const value = node.value as string - - if (value.includes(encodedWildcardSequence)) { - node.value = replaceEncodedWildcards(value) - } - }, - String: (node) => { - const value = node.value as string - - if (value.includes(encodedWildcardSequence)) { - node.value = replaceEncodedWildcards(value) - } - }, - Hash: (node) => { - const value = node.value as string - - if (value.includes(encodedWildcardSequence)) { - node.value = replaceEncodedWildcards(value) - } - }, - Url: (node) => { - const value = node.value as string - - if (value.includes(encodedWildcardSequence)) { - node.value = replaceEncodedWildcards(value) - } - }, - }) + traverseAst(queryNode, isNode, postprocessVisitors) return queryNode } @@ -281,6 +283,12 @@ const compareNodesBeforeWildcardsComparison = ( return runNodesComparators(beforeWildcardsComparators, nodeComparatorParams) } +const compareNodesAfterWildcardsComparison = ( + ...nodeComparatorParams: NodesComparatorParameters +) => { + return runNodesComparators(afterWildcardsComparators, nodeComparatorParams) +} + const getUniqueTokensFromStringOrIdentifierNode: GetUniqueTokensFromStringOrIdentifierNode = ({ queryNode, caseInsensitive, parserSettings }) => { const MIN_TOKEN_LEN = 2 @@ -290,16 +298,15 @@ const getUniqueTokensFromStringOrIdentifierNode: GetUniqueTokensFromStringOrIden const valuesToProcess: string[] = [] - if (queryNode.type === 'TextAttribute') { + if (stringNodeTypes.withName.includes(queryNode.type as string)) { valuesToProcess.push(queryNode.name as string) - valuesToProcess.push(queryNode.value as string) } - if (queryNode.type === 'Element$1') { - valuesToProcess.push(queryNode.name as string) + if (stringNodeTypes.withProperty.includes(queryNode.type as string)) { + valuesToProcess.push(queryNode.property as string) } - if (queryNode.type === 'Text$3') { + if (stringNodeTypes.withValue.includes(queryNode.type as string)) { valuesToProcess.push(queryNode.value as string) } @@ -320,7 +327,7 @@ const getUniqueTokensFromStringOrIdentifierNode: GetUniqueTokensFromStringOrIden return tokens } -export const angularEslintTemplateParser: ParserSettings = { +export const cssTree: ParserSettings = { supportedExtensions, parseCode, isNode, @@ -339,7 +346,7 @@ export const angularEslintTemplateParser: ParserSettings = { shouldCompareNode, wildcardUtils, compareNodesBeforeWildcardsComparison, - compareNodesAfterWildcardsComparison: () => undefined, + compareNodesAfterWildcardsComparison, identifierTypeAnnotationFieldName: 'typeAnnotation', stringLikeLiteralUtils, numericLiteralUtils, @@ -352,4 +359,4 @@ export const angularEslintTemplateParser: ParserSettings = { getUniqueTokensFromStringOrIdentifierNode, } -export default angularEslintTemplateParser +export default cssTree diff --git a/packages/core/src/parserSettings/index.ts b/packages/core/src/parserSettings/index.ts index 60434df..1fb79f7 100644 --- a/packages/core/src/parserSettings/index.ts +++ b/packages/core/src/parserSettings/index.ts @@ -13,5 +13,5 @@ export const parserSettingsMap: Record ParserSettings> = { ['angular-eslint-template-parser']: resolveParserSettings( 'angularEslintTemplateParser', ), - ['csstree']: resolveParserSettings('csstree'), + ['css-tree']: resolveParserSettings('cssTree'), } diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index aa4244a..54f783c 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -74,7 +74,7 @@ export type ParserType = | 'esprima' | 'babel-eslint-parser' | 'angular-eslint-template-parser' - | 'csstree' + | 'css-tree' export type FileSystemSearchArgs = { filePaths: string[] diff --git a/packages/vscode/src/SearchManager.ts b/packages/vscode/src/SearchManager.ts index 1c60a68..bef2f51 100644 --- a/packages/vscode/src/SearchManager.ts +++ b/packages/vscode/src/SearchManager.ts @@ -33,6 +33,7 @@ const extensionTesterMap: Record = { all: /\.(.)+$/, html: htmlFamilyExtensionTester, 'js-ts-json': typeScriptFamilyExtensionTester, + css: cssExtensionTester, } export class SearchManager { diff --git a/packages/vscode/src/StateManager.ts b/packages/vscode/src/StateManager.ts index 1655500..87c28dc 100644 --- a/packages/vscode/src/StateManager.ts +++ b/packages/vscode/src/StateManager.ts @@ -3,7 +3,7 @@ import { CaseType } from 'types' import * as vscode from 'vscode' import { eventBusInstance } from './EventBus' -export type SearchFileType = 'all' | 'js-ts-json' | 'html' +export type SearchFileType = 'all' | 'js-ts-json' | 'html' | 'css' export type StateShape = { fileType: SearchFileType diff --git a/packages/vscode/src/utils.ts b/packages/vscode/src/utils.ts index 882efb6..1149478 100644 --- a/packages/vscode/src/utils.ts +++ b/packages/vscode/src/utils.ts @@ -64,4 +64,5 @@ export const parserNameMap: Record = { all: 'babel', // it does not matter, just need value for happy TS html: 'angular-eslint-template-parser', 'js-ts-json': 'babel', + css: 'css-tree', } diff --git a/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx b/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx index 7a97598..ce4d550 100644 --- a/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx +++ b/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx @@ -68,6 +68,7 @@ const getHighlightFileExtension = (fileType: SearchFileType) => { all: 'tsx', html: 'html', 'js-ts-json': 'tsx', + css: 'css', } return map[fileType] diff --git a/packages/vscode/src/webviews/Sidebar/components/SearchSettings.tsx b/packages/vscode/src/webviews/Sidebar/components/SearchSettings.tsx index 1b053e1..e577fd5 100644 --- a/packages/vscode/src/webviews/Sidebar/components/SearchSettings.tsx +++ b/packages/vscode/src/webviews/Sidebar/components/SearchSettings.tsx @@ -294,6 +294,14 @@ export function SearchSettings({ > HTML + + CSS + diff --git a/yarn.lock b/yarn.lock index f2ac0e8..f97dd44 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5297,6 +5297,14 @@ fetch-blob@^3.1.2: dependencies: web-streams-polyfill "^3.0.3" +fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -7551,6 +7559,11 @@ new-github-release-url@2.0.0: dependencies: type-fest "^2.5.1" +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-fetch-commonjs@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-fetch-commonjs/-/node-fetch-commonjs-3.1.1.tgz#e36db76b9fe13bdd44a5bafabc29c61d0f01b4e1" @@ -7575,6 +7588,15 @@ node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" + integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" From 3a797398a77037dbacb79616fa8be10d064ed754 Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Thu, 29 Jun 2023 22:18:03 +0200 Subject: [PATCH 012/110] feat: css support - more improvements --- .../CSS/matchCodePatterns/wildcards.test.ts | 32 +++++++++++- .../csstree/beforeWildcardsComparators.ts | 2 + .../core/src/parserSettings/csstree/common.ts | 2 +- .../csstree/matchHashWithWildcard.ts | 51 +++++++++++++++++++ .../src/parserSettings/csstree/settings.ts | 44 ++++++++++++---- packages/vscode/src/SearchManager.ts | 4 +- packages/vscode/src/extension.ts | 32 ++++++++---- packages/vscode/src/utils.ts | 19 ++++++- .../components/QueryEditor.tsx | 4 +- 9 files changed, 165 insertions(+), 25 deletions(-) create mode 100644 packages/core/src/parserSettings/csstree/matchHashWithWildcard.ts diff --git a/packages/core/__tests__/CSS/matchCodePatterns/wildcards.test.ts b/packages/core/__tests__/CSS/matchCodePatterns/wildcards.test.ts index 735ee87..756a990 100644 --- a/packages/core/__tests__/CSS/matchCodePatterns/wildcards.test.ts +++ b/packages/core/__tests__/CSS/matchCodePatterns/wildcards.test.ts @@ -559,7 +559,7 @@ describe('Wildcard queries', () => { expect(matches.length).toBe(1) }) - it('Should match color hash with string wildcard', () => { + it('Should match color hash with node wildcard', () => { const fileContent = ` p { background: #000 @@ -618,4 +618,34 @@ describe('Wildcard queries', () => { expect(errors).toHaveLength(0) expect(matches.length).toBe(1) }) + + it('Should match dimension with node wildcard', () => { + const fileContent = ` + p { + width: 100px + } + ` + const queries = [ + ` + p { + width: $$$ + } + `, + ] + + const { matches, errors } = searchInStrings({ + mode: 'exact', + caseInsensitive: true, + queryCodes: queries, + files: [ + { + path: 'mock', + content: fileContent, + }, + ], + }) + + expect(errors).toHaveLength(0) + expect(matches.length).toBe(1) + }) }) diff --git a/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts b/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts index cc25991..5782066 100644 --- a/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts +++ b/packages/core/src/parserSettings/csstree/beforeWildcardsComparators.ts @@ -2,6 +2,7 @@ import { NodesComparator } from '../../types' import { createMatchWildcardsInPropValueNodesComparator } from '../nodeComparatorFactories/Other/matchWildcardsInPropValueNodes' import { matchWildcardInDeclarationProperty } from './matchWildcardInDeclarationProperty' import { matchWildcardsInDimension } from './matchWildcardsInDimension' +import { matchHashWithWildcard } from '../cssTree/matchHashWithWildcard' const nodeTypesWithNameAndChildren = ['Function'] @@ -30,4 +31,5 @@ export const beforeWildcardsComparators: NodesComparator[] = [ ...matchWildcardsInNodeTypesWithNameAndValueNodesComparator, matchWildcardInDeclarationProperty, matchWildcardsInDimension, + matchHashWithWildcard, ] diff --git a/packages/core/src/parserSettings/csstree/common.ts b/packages/core/src/parserSettings/csstree/common.ts index 50eade7..468e73f 100644 --- a/packages/core/src/parserSettings/csstree/common.ts +++ b/packages/core/src/parserSettings/csstree/common.ts @@ -6,7 +6,7 @@ import { PoorNodeType } from '../../types' * We compare everything using string wildcards */ -export const identifierNodeTypes: string[] = [] +export const identifierNodeTypes: string[] = ['Identifier'] const wildcardChar = '$' const numericWildcard = '0x0' diff --git a/packages/core/src/parserSettings/csstree/matchHashWithWildcard.ts b/packages/core/src/parserSettings/csstree/matchHashWithWildcard.ts new file mode 100644 index 0000000..0a336ff --- /dev/null +++ b/packages/core/src/parserSettings/csstree/matchHashWithWildcard.ts @@ -0,0 +1,51 @@ +import { NodesComparator, PoorNodeType } from '../../types' +import { matchStringOrIdentifierAliases } from '../../searchStages/matchStringOrIdentifierAliases' + +/* + * Adds support for matching color Hash with wildcard + * Q: {color: $$ } C: {color: #000 } + */ +export const matchHashWithWildcard: NodesComparator = ( + { queryNode, fileNode, searchSettings, matchContext }, + _, + { fileKeysToTraverseForOtherMatches, log }, +) => { + if (queryNode?.type === 'Identifier' && fileNode?.type === 'Hash') { + log( + 'Compare Identifier with Hash node', + queryNode.name as string, + fileNode.value as string, + ) + + const { wildcardUtils } = searchSettings.parserSettings + const { caseInsensitive } = searchSettings + + const queryNodeStringContent = queryNode.name as string + + const fileNodeStringContent = fileNode.value as string + + const wildcardsMeta = wildcardUtils.getStringWildcardsFromString( + queryNodeStringContent, + ) + + if (wildcardsMeta.length > 0) { + const levelMatch = matchStringOrIdentifierAliases({ + queryValue: queryNodeStringContent, + fileValue: fileNodeStringContent, + wildcardsMeta, + matchContext, + wildcardUtils, + caseInsensitive, + }) + + if (levelMatch) { + return { + levelMatch, + queryKeysToTraverseForValidatingMatch: [], + fileKeysToTraverseForValidatingMatch: [], + fileKeysToTraverseForOtherMatches, + } + } + } + } +} diff --git a/packages/core/src/parserSettings/csstree/settings.ts b/packages/core/src/parserSettings/csstree/settings.ts index 78cf00b..c14a8db 100644 --- a/packages/core/src/parserSettings/csstree/settings.ts +++ b/packages/core/src/parserSettings/csstree/settings.ts @@ -153,11 +153,24 @@ const programNodeAndBlockNodeUtils: ProgramNodeAndBlockNodeUtils = { const getNodePosition: ParserSettings['getNodePosition'] = ( node: PoorNodeType, -) => ({ - start: ((node?.loc as any)?.start?.offset as number) ?? 0, - end: ((node?.loc as any)?.end?.offset as number) ?? 0, - loc: node.loc as unknown as Location, -}) +) => { + const location = node.loc as unknown as Location + + return { + start: ((location as any)?.start?.offset as number) ?? 0, + end: ((location as any)?.end?.offset as number) ?? 0, + loc: { + start: { + line: location.start.line, + column: location.start.column - 1, // We need 0-based, parser return 1-based + }, + end: { + line: location.end.line, + column: location.end.column - 1, // We need 0-based, parser return 1-based + }, + }, + } +} const getParseErrorLocation = (e: any) => ({ line: e.loc?.line ?? 0, @@ -175,11 +188,14 @@ const alternativeNodeTypes = { * - Same for numeric wildcard 0x0 -> 00000000 // 0{8} * `$$` is invalid tag name start in all html parsers */ -const encodedStringWildcardSequence = 'a_a_x' +const encodedStringWildcardSequence = 'a_a_a' +const encodedNodesTreeWildcardSequence = 'z_z_z' + const encodedNumericWildcardSequence = '00000000' const preprocessQueryCode = (code: string) => { const queryCode = code + .replace(/(\$\$\$)/g, () => encodedNodesTreeWildcardSequence) .replace(/(\$\$)/g, () => encodedStringWildcardSequence) .replace(/0x0/g, encodedNumericWildcardSequence) @@ -187,7 +203,10 @@ const preprocessQueryCode = (code: string) => { } const replaceEncodedWildcards = (value: string) => - value.replace(/a_a_x/g, () => '$$').replace(/0{8}/g, '0x0') + value + .replace(/a_a_a/g, () => '$$') + .replace(/z_z_z/g, () => '$$$') + .replace(/0{8}/g, '0x0') const stringNodeTypes = { withName: [ @@ -208,7 +227,10 @@ const stringNodeTypes = { const postprocessQueryNodeWithName = (node: PoorNodeType) => { const name = node.name as string - if (name.includes(encodedStringWildcardSequence)) { + if ( + name.includes(encodedStringWildcardSequence) || + name.includes(encodedNodesTreeWildcardSequence) + ) { node.name = replaceEncodedWildcards(name) } } @@ -218,6 +240,7 @@ const postprocessQueryNodeWithValue = (node: PoorNodeType) => { if ( value.includes(encodedStringWildcardSequence) || + value.includes(encodedNodesTreeWildcardSequence) || value.includes(encodedNumericWildcardSequence) ) { node.value = replaceEncodedWildcards(value) @@ -227,7 +250,10 @@ const postprocessQueryNodeWithValue = (node: PoorNodeType) => { const postprocessQueryNodeWithProperty = (node: PoorNodeType) => { const property = node.property as string - if (property.includes(encodedStringWildcardSequence)) { + if ( + property.includes(encodedStringWildcardSequence) || + property.includes(encodedNodesTreeWildcardSequence) + ) { node.property = replaceEncodedWildcards(property) } } diff --git a/packages/vscode/src/SearchManager.ts b/packages/vscode/src/SearchManager.ts index bef2f51..dbf9818 100644 --- a/packages/vscode/src/SearchManager.ts +++ b/packages/vscode/src/SearchManager.ts @@ -20,7 +20,7 @@ import path from 'path' import * as vscode from 'vscode' import { eventBusInstance } from './EventBus' import { StateManager, StateShape, SearchFileType } from './StateManager' -import { simpleDebounce, parserNameMap } from './utils' +import { simpleDebounce, fileTypeToParserMap } from './utils' type FilesLists = { files: string[] @@ -419,7 +419,7 @@ export class SearchManager { extensionTester, ) - const parser = parserNameMap[settings.fileType] + const parser = fileTypeToParserMap[settings.fileType] // We start search in next tick so not block events delivery and UI update setTimeout( diff --git a/packages/vscode/src/extension.ts b/packages/vscode/src/extension.ts index 19aa078..376ba53 100644 --- a/packages/vscode/src/extension.ts +++ b/packages/vscode/src/extension.ts @@ -2,8 +2,7 @@ import * as vscode from 'vscode' import { SidebarProvider } from './SidebarProvider' import { SearchResultsPanel } from './SearchResultsPanel' import { StateManager, StateShape } from './StateManager' -import dedent from 'dedent' -import { EventBus, eventBusInstance } from './EventBus' +import { eventBusInstance } from './EventBus' import { SearchManager } from './SearchManager' import { parseQueries, @@ -13,7 +12,12 @@ import { } from '@codeque/core' import { sanitizeFsPath } from './nodeUtils' import path from 'path' -import { dedentPatched } from './utils' +import { + dedentPatched, + SupportedParsers, + supportedParsers, + parserToFileTypeMap, +} from './utils' let dispose = (() => undefined) as () => void @@ -82,15 +86,25 @@ export function activate(context: vscode.ExtensionContext) { : selectedCode if (newQuery) { - const [, queryParseOk] = parseQueries( - [newQuery], - false, - __internal.parserSettingsMap['babel'](), - ) + let foundParser: SupportedParsers | null = null + + for (const parser of supportedParsers) { + const [, queryParseOk] = parseQueries( + [newQuery], + false, + __internal.parserSettingsMap[parser](), + ) + + if (queryParseOk) { + foundParser = parser + break + } + } stateManager.setState({ query: newQuery, - mode: !queryParseOk && state.mode !== 'text' ? 'text' : state.mode, + mode: !foundParser && state.mode !== 'text' ? 'text' : state.mode, + fileType: !foundParser ? 'all' : parserToFileTypeMap[foundParser], }) } diff --git a/packages/vscode/src/utils.ts b/packages/vscode/src/utils.ts index 1149478..6a40082 100644 --- a/packages/vscode/src/utils.ts +++ b/packages/vscode/src/utils.ts @@ -60,9 +60,26 @@ export function getScrollParent(node: any): any { } } -export const parserNameMap: Record = { +export type SupportedParsers = Extract< + ParserType, + 'babel' | 'angular-eslint-template-parser' | 'css-tree' +> + +export const supportedParsers: SupportedParsers[] = [ + 'babel', + 'angular-eslint-template-parser', + 'css-tree', +] + +export const fileTypeToParserMap: Record = { all: 'babel', // it does not matter, just need value for happy TS html: 'angular-eslint-template-parser', 'js-ts-json': 'babel', css: 'css-tree', } + +export const parserToFileTypeMap: Record = { + ['angular-eslint-template-parser']: 'html', + babel: 'js-ts-json', + ['css-tree']: 'css', +} diff --git a/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx b/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx index ce4d550..a1e1674 100644 --- a/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx +++ b/packages/vscode/src/webviews/SearchResultsPanel/components/QueryEditor.tsx @@ -6,7 +6,7 @@ import { Mode, searchInStrings } from '@codeque/core/web' import { Fragment, useCallback, useEffect, useState } from 'react' import { codeRed } from '../../components/Highlight' import { useThemeType } from '../../components/useThemeType' -import useDebounce, { parserNameMap } from '../../../utils' +import useDebounce, { fileTypeToParserMap } from '../../../utils' import { SearchFileType } from '../../../StateManager' @@ -99,7 +99,7 @@ export function QueryEditor({ setQueryHint(null) try { - const parser = parserNameMap[fileType] + const parser = fileTypeToParserMap[fileType] const matches = searchInStrings({ queryCodes: [query], From 3538de35aeb08184707c0ad6d35ea83242fb8e4c Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Sat, 1 Jul 2023 16:36:47 +0200 Subject: [PATCH 013/110] chore: setup telemetry --- packages/eslint/README.md | 10 +- packages/eslint/declarations.d.ts | 2 + packages/eslint/package.json | 10 +- packages/eslint/src/lintCode.ts | 33 +- packages/eslint/src/scripts/postinstall.ts | 7 + packages/eslint/src/telemetry.ts | 118 ++++++ packages/vscode/README.md | 6 + packages/vscode/package.json | 1 + packages/vscode/src/SearchManager.ts | 63 ++- packages/vscode/src/extension.ts | 6 +- packages/vscode/src/telemetry.ts | 12 + packages/vscode/webpack.extension.config.js | 2 + yarn.lock | 438 ++++++++++++++++++-- 13 files changed, 670 insertions(+), 38 deletions(-) create mode 100644 packages/eslint/src/scripts/postinstall.ts create mode 100644 packages/eslint/src/telemetry.ts create mode 100644 packages/vscode/src/telemetry.ts diff --git a/packages/eslint/README.md b/packages/eslint/README.md index 192149a..a421d82 100644 --- a/packages/eslint/README.md +++ b/packages/eslint/README.md @@ -126,4 +126,12 @@ You can check performance of your CodeQue ESLint rules by running TIMING=1 CODEQUE_DEBUG=true yarn YOUR_LINT_SCRIPT ``` -> Use TIMING=all to list all ESLint rules. \ No newline at end of file +> Use TIMING=all to list all ESLint rules. + +## Telemetry + +Plugin collects completely anonymous telemetry that helps me get insights about usage. + +It's implemented using `applicationinsights` and you can easily opt-out. + +Learn more about [telemetry](https://codeque.co/docs/telemetry#es-lint-plugin) \ No newline at end of file diff --git a/packages/eslint/declarations.d.ts b/packages/eslint/declarations.d.ts index dbdeeb5..b1d2b07 100644 --- a/packages/eslint/declarations.d.ts +++ b/packages/eslint/declarations.d.ts @@ -3,3 +3,5 @@ declare global { //eslint-disable-next-line no-var var ruleTester: RuleTester } + +declare module 'is-ci' diff --git a/packages/eslint/package.json b/packages/eslint/package.json index 187008f..608823c 100644 --- a/packages/eslint/package.json +++ b/packages/eslint/package.json @@ -1,6 +1,6 @@ { "name": "@codeque/eslint-plugin", - "version": "0.0.0-beta.0", + "version": "0.0.0-beta.14", "description": "Create custom ESLint rules based on code sample(s). Utilizing CodeQue - structural code search engine.", "author": "Jakub Mazurek (@jayu) ", "license": "Sustainable Use License", @@ -32,7 +32,10 @@ "ts-jest": "^27.1.1" }, "dependencies": { - "@codeque/core": "^0.4.0" + "@codeque/core": "^0.4.0", + "applicationinsights": "^2.7.0", + "is-ci": "^3.0.1", + "node-machine-id": "^1.1.12" }, "peerDependencies": { "eslint": "^8.34.0" @@ -46,7 +49,8 @@ "lint": "eslint --ext .js,.ts src", "lint:fix": "yarn lint --fix", "checks": "yarn lint && yarn typecheck && yarn test:circular && yarn test", - "release": "release-it" + "release": "release-it", + "postinstall": "node ./dist/scripts/postinstall.js" }, "keywords": [ "typescript", diff --git a/packages/eslint/src/lintCode.ts b/packages/eslint/src/lintCode.ts index 1019771..2c2293b 100644 --- a/packages/eslint/src/lintCode.ts +++ b/packages/eslint/src/lintCode.ts @@ -21,6 +21,7 @@ import { assertCompatibleParser, parserNamesMappingsToCodeQueInternal, } from './utils' +import { telemetryDisabled, createTelemetryInstance } from './telemetry' const queriesCache = {} as Record @@ -43,10 +44,19 @@ process.on('beforeExit', () => { console.log('filteringFilePathsTime', filteringFilePathsTime) console.log('searchTimeForQueries', searchTimeForQueries) console.log('') + console.log('Telemetry is', telemetryDisabled ? 'disabled' : 'enabled') } }) -export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ +const telemetryReported = { + problem: false, + suggestion: false, + layout: false, +} + +export const createLintCode = ( + type: NonNullable, +) => ({ meta: { type: type, docs: { @@ -89,6 +99,7 @@ export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ ], }, create: function (context: Rule.RuleContext) { + const telemetry = createTelemetryInstance() const prepStart = performance.now() const parser = assertCompatibleParser(context.parserPath) @@ -314,6 +325,26 @@ export const createLintCode = (type: Rule.RuleMetaData['type']) => ({ preparingVisitorsTime += performance.now() - preparingVisitorsStart preparationTime += performance.now() - prepStart + if (!telemetryReported[type]) { + telemetry.reportConfig({ + ruleType: type === 'problem' ? 'error' : 'warning', + queriesCount: queryCodes.length, + mode_include: + searchModes.includes('include') || + settings.some(({ mode }) => mode === undefined), + mode_exact: searchModes.includes('exact'), + mode_include_w_order: searchModes.includes('include-with-order'), + fileFilters_include: settings.some( + ({ includeFiles }) => includeFiles !== undefined, + ), + fileFilters_exclude: settings.some( + ({ excludeFiles }) => excludeFiles !== undefined, + ), + }) + + telemetryReported[type] = true + } + return visitors as unknown as Record void> }, }) diff --git a/packages/eslint/src/scripts/postinstall.ts b/packages/eslint/src/scripts/postinstall.ts new file mode 100644 index 0000000..6cb40b2 --- /dev/null +++ b/packages/eslint/src/scripts/postinstall.ts @@ -0,0 +1,7 @@ +import { createTelemetryInstance } from '../telemetry' + +const isCodeQueRepo = process.cwd().match(/packages(\/|\\)eslint$/g) !== null + +if (!isCodeQueRepo) { + createTelemetryInstance().reportInstall() +} diff --git a/packages/eslint/src/telemetry.ts b/packages/eslint/src/telemetry.ts new file mode 100644 index 0000000..4157bc7 --- /dev/null +++ b/packages/eslint/src/telemetry.ts @@ -0,0 +1,118 @@ +import { machineIdSync } from 'node-machine-id' +import fs from 'fs' +import { createHash } from 'crypto' +import { defaultClient, setup, dispose } from 'applicationinsights' +//@ts-ignore +import isCI from 'is-ci' + +type TelemetryModule = { + reportConfig: (param: { + ruleType: 'error' | 'warning' + queriesCount: number + mode_include: boolean + mode_exact: boolean + mode_include_w_order: boolean + fileFilters_include: boolean + fileFilters_exclude: boolean + }) => void + reportInstall: () => void +} + +const disabledTelemetryInstance: TelemetryModule = { + reportConfig: () => undefined, + reportInstall: () => undefined, +} + +function hash(guid: string): string { + return createHash('sha256').update(guid).digest('hex') +} + +const getProjectId = () => { + const path = process.cwd() + '/package.json' + + try { + const packageJSON = fs.readFileSync(path).toString() + + const parsedPackageJSON = JSON.parse(packageJSON) + + return hash(parsedPackageJSON.name) + } catch (e) { + return null + } +} + +export const telemetryDisabled = + process.env.CQ_ESLINT_TELEMETRY_DISABLE === 'true' + +export const createTelemetryInstance = (): TelemetryModule => { + if (telemetryDisabled) { + return disabledTelemetryInstance + } + + setup( + 'InstrumentationKey=8f838c47-7173-4f6c-851a-b012d45d9ad8;IngestionEndpoint=https://eastus-8.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/', + ) + .setAutoDependencyCorrelation(false) + .setAutoCollectRequests(false) + .setAutoCollectPerformance(false, false) + .setAutoCollectExceptions(false) + .setAutoCollectDependencies(false) + .setAutoCollectConsole(false, false) + .setUseDiskRetryCaching(false) + .setAutoCollectPreAggregatedMetrics(false) + .setSendLiveMetrics(false) + .setAutoCollectHeartbeat(false) + .setAutoCollectIncomingRequestAzureFunctions(false) + .setInternalLogging(false, false) + .enableWebInstrumentation(false) + + const telemetryClient = defaultClient + + const machineId = machineIdSync() + const projectId = getProjectId() + const arch = process.arch + const platform = process.platform + const nodeVersion = process.version + + const commonProps = { + machineId, + projectId, + arch, + platform, + nodeVersion, + isCI, + } + + return { + reportConfig: (params) => { + try { + telemetryClient.trackEvent({ + name: 'eslint:config', + properties: { + ...commonProps, + ...params, + }, + }) + + telemetryClient.flush() + dispose() + console.log('telemetry reported') + } catch (e) { + console.error('Failed to report telemetry for config') + } + }, + reportInstall: () => { + try { + telemetryClient.trackEvent({ + name: 'eslint:install', + properties: commonProps, + }) + + telemetryClient.flush() + dispose() + } catch (e) { + console.error('Failed to report telemetry for install') + } + }, + } +} diff --git a/packages/vscode/README.md b/packages/vscode/README.md index 103a346..2df420e 100644 --- a/packages/vscode/README.md +++ b/packages/vscode/README.md @@ -302,7 +302,13 @@ useRequest({ apiMethod: $$$ ? $$$ : $$$ }) ``` +## Telemetry +Extension collects anonymous telemetry to help me get insights about usage. + +It's implemented using `@vscode/extension-telemetry` and respects you editor telemetry settings. + +Learn more about [telemetry](https://codeque.co/docs/telemetry#vs-code-extension) ## Support, Feedback and more diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 09d8ac6..f292254 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -163,6 +163,7 @@ "@emotion/styled": "^11.9.3", "@types/react": "^18.0.15", "@types/react-dom": "^18.0.6", + "@vscode/extension-telemetry": "^0.8.0", "copy-to-clipboard": "^3.3.2", "dedent": "^0.7.0", "framer-motion": "^6.5.1", diff --git a/packages/vscode/src/SearchManager.ts b/packages/vscode/src/SearchManager.ts index dbf9818..ce759f0 100644 --- a/packages/vscode/src/SearchManager.ts +++ b/packages/vscode/src/SearchManager.ts @@ -21,6 +21,7 @@ import * as vscode from 'vscode' import { eventBusInstance } from './EventBus' import { StateManager, StateShape, SearchFileType } from './StateManager' import { simpleDebounce, fileTypeToParserMap } from './utils' +import TelemetryReporter from '@vscode/extension-telemetry' type FilesLists = { files: string[] @@ -54,14 +55,19 @@ export class SearchManager { workspaceFoldersChangeListener: undefined as vscode.Disposable | undefined, } private lastSearchSettings: StateShape | undefined + private telemetryReporter: TelemetryReporter - constructor(private readonly stateManager: StateManager) { + constructor( + private readonly stateManager: StateManager, + telemetryReporter: TelemetryReporter, + ) { eventBusInstance.addListener('start-search', this.startSearch) eventBusInstance.addListener('stop-search', this.stopCurrentSearch) this.initializeSearchRoots() this.maybeStartWatchingFilesList() this.watchWorkspaceChanges() + this.telemetryReporter = telemetryReporter } private determineRoots() { @@ -439,12 +445,14 @@ export class SearchManager { const searchTime = (searchEnd - searchStart) / 1000 + const processedResults = this.processSearchResults( + { ...results, matches: allPartialMatches }, + roots, + isWorkspace, + ) + eventBusInstance.dispatch('have-results', { - results: this.processSearchResults( - { ...results, matches: allPartialMatches }, - roots, - isWorkspace, - ), + results: processedResults, time: searchTime, files: filesListFilteredByExtension, isWorkspace, @@ -455,6 +463,27 @@ export class SearchManager { this.currentSearchHardStopFlag?.destroy() this.currentFilesGetHardStopFlag = undefined this.currentSearchHardStopFlag = undefined + + try { + this.telemetryReporter.sendTelemetryEvent( + 'vscode:search_results', + { + mode: settings.mode, + caseType: settings.caseType, + fileType: settings.fileType, + isWorkspace: isWorkspace ? 'true' : 'false', + }, + { + queryLength: settings.query.length, + searchTime: searchTime, + resultsCount: processedResults.matches.length, + errorsCount: processedResults.errors.length, + searchedFilesCount: filesListFilteredByExtension.length, + }, + ) + } catch (e) { + console.error(e) + } }).bind(this), 0, ) @@ -482,6 +511,8 @@ export class SearchManager { console.error(error) + const searchTime = (Date.now() - searchStart) / 1000 + eventBusInstance.dispatch('have-results', { results: { matches: [], @@ -491,12 +522,30 @@ export class SearchManager { groupedMatches: {}, workspacesMap: {}, }, - time: (Date.now() - searchStart) / 1000, + time: searchTime, files: [], isWorkspace: isWorkspace ?? false, }) this.searchRunning = false + + try { + this.telemetryReporter.sendTelemetryErrorEvent( + 'vscode:search_error', + { + mode: settings.mode, + caseType: settings.caseType, + fileType: settings.fileType, + isWorkspace: isWorkspace ? 'true' : 'false', + }, + { + queryLength: settings.query.length, + searchTime, + }, + ) + } catch (e) { + console.error(e) + } } } public dispose() { diff --git a/packages/vscode/src/extension.ts b/packages/vscode/src/extension.ts index 376ba53..2486004 100644 --- a/packages/vscode/src/extension.ts +++ b/packages/vscode/src/extension.ts @@ -18,10 +18,14 @@ import { supportedParsers, parserToFileTypeMap, } from './utils' +import { activateReporter } from './telemetry' let dispose = (() => undefined) as () => void export function activate(context: vscode.ExtensionContext) { + const telemetryReporter = activateReporter() + context.subscriptions.push(telemetryReporter) + const { extensionUri } = context const stateManager = new StateManager(context.workspaceState) @@ -46,7 +50,7 @@ export function activate(context: vscode.ExtensionContext) { stateManager, ) - const searchManager = new SearchManager(stateManager) + const searchManager = new SearchManager(stateManager, telemetryReporter) dispose = searchManager.dispose const item = vscode.window.createStatusBarItem( diff --git a/packages/vscode/src/telemetry.ts b/packages/vscode/src/telemetry.ts new file mode 100644 index 0000000..2d98024 --- /dev/null +++ b/packages/vscode/src/telemetry.ts @@ -0,0 +1,12 @@ +import TelemetryReporter from '@vscode/extension-telemetry' + +const applicationInsightsInstrumentationKey = + '8f838c47-7173-4f6c-851a-b012d45d9ad8' + +let reporter: TelemetryReporter | null = null + +export const activateReporter = () => { + reporter = new TelemetryReporter(applicationInsightsInstrumentationKey) + + return reporter +} diff --git a/packages/vscode/webpack.extension.config.js b/packages/vscode/webpack.extension.config.js index 9d96e2b..9869300 100644 --- a/packages/vscode/webpack.extension.config.js +++ b/packages/vscode/webpack.extension.config.js @@ -47,6 +47,8 @@ module.exports = (env, argv) => { espree: false, esprima: false, '@babel/eslint-parser': false, + 'applicationinsights-native-metrics': false, + '@azure/functions-core': false, }, }, module: { diff --git a/yarn.lock b/yarn.lock index f97dd44..f2a3650 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,79 @@ "@angular-eslint/bundled-angular-compiler" "15.2.1" eslint-scope "^7.0.0" +"@azure/abort-controller@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" + integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw== + dependencies: + tslib "^2.2.0" + +"@azure/core-auth@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.4.0.tgz#6fa9661c1705857820dbc216df5ba5665ac36a9e" + integrity sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + +"@azure/core-rest-pipeline@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz#348290847ca31b9eecf9cf5de7519aaccdd30968" + integrity sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-auth" "^1.4.0" + "@azure/core-tracing" "^1.0.1" + "@azure/core-util" "^1.0.0" + "@azure/logger" "^1.0.0" + form-data "^4.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + tslib "^2.2.0" + uuid "^8.3.0" + +"@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.1.tgz#352a38cbea438c4a83c86b314f48017d70ba9503" + integrity sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw== + dependencies: + tslib "^2.2.0" + +"@azure/core-util@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.2.0.tgz#3499deba1fc36dda6f1912b791809b6f15d4a392" + integrity sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + +"@azure/core-util@^1.0.0": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.3.2.tgz#3f8cfda1e87fac0ce84f8c1a42fcd6d2a986632d" + integrity sha512-2bECOUh88RvL1pMZTcc6OzfobBeWDBf5oBbhjIhT1MV9otMVWCzpOJkkiKtrnO88y5GGBelgY8At73KGAdbkeQ== + dependencies: + "@azure/abort-controller" "^1.0.0" + tslib "^2.2.0" + +"@azure/logger@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.4.tgz#28bc6d0e5b3c38ef29296b32d35da4e483593fa1" + integrity sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg== + dependencies: + tslib "^2.2.0" + +"@azure/opentelemetry-instrumentation-azure-sdk@^1.0.0-beta.3": + version "1.0.0-beta.4" + resolved "https://registry.yarnpkg.com/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.4.tgz#3d04e5984f9ac539db69b004676556d3c337759e" + integrity sha512-bSF2l47Od7kH+u/O67cmQCj5jmNeC+gUNDKr2cMfLBwSqk12T7B4JZQ34viEq2vhLWoKbZO7j6srPmKiSGPzNg== + dependencies: + "@azure/core-tracing" "^1.0.0" + "@azure/logger" "^1.0.0" + "@opentelemetry/api" "^1.4.1" + "@opentelemetry/core" "^1.14.0" + "@opentelemetry/instrumentation" "^0.40.0" + tslib "^2.2.0" + "@babel/cli@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.0.tgz#a729b7a48eb80b49f48a339529fc4129fd7bcef3" @@ -2222,6 +2295,106 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@microsoft/1ds-core-js@3.2.12", "@microsoft/1ds-core-js@^3.2.10": + version "3.2.12" + resolved "https://registry.yarnpkg.com/@microsoft/1ds-core-js/-/1ds-core-js-3.2.12.tgz#f5f56626bd0385a357fae6f730eea347be02ce64" + integrity sha512-cHpxZZ+pbtOyqFMFB/c1COpaOE3VPFU6phYVHVvOA9DvoeMZfI/Xrxaj7B/vfq4MmkiE7nOAPhv5ZRn+i6OogA== + dependencies: + "@microsoft/applicationinsights-core-js" "2.8.14" + "@microsoft/applicationinsights-shims" "^2.0.2" + "@microsoft/dynamicproto-js" "^1.1.7" + +"@microsoft/1ds-post-js@^3.2.10": + version "3.2.12" + resolved "https://registry.yarnpkg.com/@microsoft/1ds-post-js/-/1ds-post-js-3.2.12.tgz#60f6ff48ba48c88880c1bceb376711cdd34f87ea" + integrity sha512-vhIVYg4FzBfwtM8tBqDUq3xU+cFu6SQ7biuJHtQpd5PVjDgvAovVOMRF1khsZE/k2rttRRBpmBgNEqG3Ptoysw== + dependencies: + "@microsoft/1ds-core-js" "3.2.12" + "@microsoft/applicationinsights-shims" "^2.0.2" + "@microsoft/dynamicproto-js" "^1.1.7" + +"@microsoft/applicationinsights-channel-js@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.0.2.tgz#be49fbf74831c7b8c97950027c5052ea99d2a8a5" + integrity sha512-jDBNKbCHsJgmpv0CKNhJ/uN9ZphvfGdb93Svk+R4LjO8L3apNNMbDDPxBvXXi0uigRmA1TBcmyBG4IRKjabGhw== + dependencies: + "@microsoft/applicationinsights-common" "3.0.2" + "@microsoft/applicationinsights-core-js" "3.0.2" + "@microsoft/applicationinsights-shims" "3.0.1" + "@microsoft/dynamicproto-js" "^2.0.2" + "@nevware21/ts-async" ">= 0.2.4 < 2.x" + "@nevware21/ts-utils" ">= 0.9.5 < 2.x" + +"@microsoft/applicationinsights-common@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-common/-/applicationinsights-common-3.0.2.tgz#37670bb07f4858ed41ff9759119e0759007d6e05" + integrity sha512-y+WXWop+OVim954Cu1uyYMnNx6PWO8okHpZIQi/1YSqtqaYdtJVPv4P0AVzwJdohxzVfgzKvqj9nec/VWqE2Zg== + dependencies: + "@microsoft/applicationinsights-core-js" "3.0.2" + "@microsoft/applicationinsights-shims" "3.0.1" + "@microsoft/dynamicproto-js" "^2.0.2" + "@nevware21/ts-utils" ">= 0.9.5 < 2.x" + +"@microsoft/applicationinsights-core-js@2.8.14": + version "2.8.14" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.14.tgz#80e3d9d42102e741494726d78ac923098bad7132" + integrity sha512-XacWUHdjSHMUwdngMZBp0oiCBifD56CQK2Egu2PiBiF4xu2AO2yNCtWSXsQX2g5OkEhVwaEjfa/aH3WbpYxB1g== + dependencies: + "@microsoft/applicationinsights-shims" "2.0.2" + "@microsoft/dynamicproto-js" "^1.1.9" + +"@microsoft/applicationinsights-core-js@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.2.tgz#108e20df8c162bec92b1f66f9de2530a25d9f51a" + integrity sha512-WQhVhzlRlLDrQzn3OShCW/pL3BW5WC57t0oywSknX3q7lMzI3jDg7Ihh0iuIcNTzGCTbDkuqr4d6IjEDWIMtJQ== + dependencies: + "@microsoft/applicationinsights-shims" "3.0.1" + "@microsoft/dynamicproto-js" "^2.0.2" + "@nevware21/ts-async" ">= 0.2.4 < 2.x" + "@nevware21/ts-utils" ">= 0.9.5 < 2.x" + +"@microsoft/applicationinsights-shims@2.0.2", "@microsoft/applicationinsights-shims@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.2.tgz#92b36a09375e2d9cb2b4203383b05772be837085" + integrity sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg== + +"@microsoft/applicationinsights-shims@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz#3865b73ace8405b9c4618cc5c571f2fe3876f06f" + integrity sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg== + dependencies: + "@nevware21/ts-utils" ">= 0.9.4 < 2.x" + +"@microsoft/applicationinsights-web-basic@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.0.2.tgz#f777a4d24b79dde3ae396d3b819e1fce06b7240a" + integrity sha512-6Lq0DE/pZp9RvSV+weGbcxN1NDmfczj6gNPhvZKV2YSQ3RK0LZE3+wjTWLXfuStq8a+nCBdsRpWk8tOKgsoxcg== + dependencies: + "@microsoft/applicationinsights-channel-js" "3.0.2" + "@microsoft/applicationinsights-common" "3.0.2" + "@microsoft/applicationinsights-core-js" "3.0.2" + "@microsoft/applicationinsights-shims" "3.0.1" + "@microsoft/dynamicproto-js" "^2.0.2" + "@nevware21/ts-async" ">= 0.2.4 < 2.x" + "@nevware21/ts-utils" ">= 0.9.5 < 2.x" + +"@microsoft/applicationinsights-web-snippet@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz#6bb788b2902e48bf5d460c38c6bb7fedd686ddd7" + integrity sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ== + +"@microsoft/dynamicproto-js@^1.1.7", "@microsoft/dynamicproto-js@^1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz#7437db7aa061162ee94e4131b69a62b8dad5dea6" + integrity sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ== + +"@microsoft/dynamicproto-js@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz#e57fbec2e7067d48b7e8e1e1c1d354028ef718a6" + integrity sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg== + dependencies: + "@nevware21/ts-utils" ">= 0.9.4 < 2.x" + "@motionone/animation@^10.12.0": version "10.12.0" resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.12.0.tgz#bca8968d3d9c779f8a548678f24206bd36cc60b6" @@ -2275,6 +2448,18 @@ hey-listen "^1.0.8" tslib "^2.3.1" +"@nevware21/ts-async@>= 0.2.4 < 2.x": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@nevware21/ts-async/-/ts-async-0.2.6.tgz#9fad1c4a56b01430b407d454817f68bb6ace92b0" + integrity sha512-NCUqEZSbsy7LVtKlUScd/eTst6djkWauLlzoIPVKCOxalEBdO8lrgNRIm4Xy68JNudNN5faqa2WA12X8m0BVhA== + dependencies: + "@nevware21/ts-utils" ">= 0.9.7 < 2.x" + +"@nevware21/ts-utils@>= 0.9.4 < 2.x", "@nevware21/ts-utils@>= 0.9.5 < 2.x", "@nevware21/ts-utils@>= 0.9.7 < 2.x": + version "0.9.8" + resolved "https://registry.yarnpkg.com/@nevware21/ts-utils/-/ts-utils-0.9.8.tgz#6db23211a5c7539d3b4362e273087effcfc7d2f8" + integrity sha512-kZ8s8hcn9jPVX/M7kSsBYrOGlHjqLahmxrG7QeKTk5paeVwfgKdvVCjj5Acb4UGb/ukU1G34U1Z3eb7bbVanyA== + "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": version "2.1.8-no-fsevents.3" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" @@ -2409,6 +2594,51 @@ dependencies: "@octokit/openapi-types" "^11.2.0" +"@opentelemetry/api@^1.0.4", "@opentelemetry/api@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f" + integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA== + +"@opentelemetry/core@1.14.0", "@opentelemetry/core@^1.12.0", "@opentelemetry/core@^1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.14.0.tgz#64e876b29cb736c984d54164cd47433f513eafd3" + integrity sha512-MnMZ+sxsnlzloeuXL2nm5QcNczt/iO82UOeQQDHhV83F2fP3sgntW2evvtoxJki0MBLxEsh5ADD7PR/Hn5uzjw== + dependencies: + "@opentelemetry/semantic-conventions" "1.14.0" + +"@opentelemetry/instrumentation@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.40.0.tgz#13d5f2d60c3fafef124ab6961a32204f7ef8bb25" + integrity sha512-23TzBKPflUS1uEq5SXymnQKQDSda35KvHjnvxdcDQGE+wg6hwDHgScUCWiBmZW4sxAaPcANfs+Wc9B7yDuyT6Q== + dependencies: + "@types/shimmer" "^1.0.2" + import-in-the-middle "1.3.5" + require-in-the-middle "^7.1.0" + semver "^7.3.2" + shimmer "^1.2.1" + +"@opentelemetry/resources@1.14.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.14.0.tgz#d6b0a4e71c2706d33c8c6ec7a7b8fea6ad27ddea" + integrity sha512-qRfWIgBxxl3z47E036Aey0Lj2ZjlFb27Q7Xnj1y1z/P293RXJZGLtcfn/w8JF7v1Q2hs3SDGxz7Wb9Dko1YUQA== + dependencies: + "@opentelemetry/core" "1.14.0" + "@opentelemetry/semantic-conventions" "1.14.0" + +"@opentelemetry/sdk-trace-base@^1.12.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.14.0.tgz#831af08f002228a11e577ff860eb6059c8b80fb7" + integrity sha512-NzRGt3PS+HPKfQYMb6Iy8YYc5OKA73qDwci/6ujOIvyW9vcqBJSWbjZ8FeLEAmuatUB5WrRhEKu9b0sIiIYTrQ== + dependencies: + "@opentelemetry/core" "1.14.0" + "@opentelemetry/resources" "1.14.0" + "@opentelemetry/semantic-conventions" "1.14.0" + +"@opentelemetry/semantic-conventions@1.14.0", "@opentelemetry/semantic-conventions@^1.12.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.14.0.tgz#6a729b7f372ce30f77a3f217c09bc216f863fccb" + integrity sha512-rJfCY8rCWz3cb4KI6pEofnytvMPuj3YLQwoscCCYZ5DkdiPjo15IQ0US7+mjcWy9H3fcZIzf2pbJZ7ck/h4tug== + "@popperjs/core@^2.9.3": version "2.11.5" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64" @@ -2471,6 +2701,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@types/babel__code-frame@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@types/babel__code-frame/-/babel__code-frame-7.0.3.tgz#eda94e1b7c9326700a4b69c485ebbc9498a0b63f" @@ -2783,6 +3018,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/shimmer@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.0.2.tgz#93eb2c243c351f3f17d5c580c7467ae5d686b65f" + integrity sha512-dKkr1bTxbEsFlh2ARpKzcaAmsYixqt9UyCdoEZk8rHyE4iQYcDCyvSjDSf7JUWJHlJiTtbIoQjxKh6ViywqDAg== + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -3118,6 +3358,16 @@ resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@vscode/extension-telemetry@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@vscode/extension-telemetry/-/extension-telemetry-0.8.0.tgz#bccfec5d9b8e4aaed3c5d1eedd22ed7716f21d2c" + integrity sha512-ZJnMnFUFEP7kdBMYvzghhwnEoK1rMrypiEFqx+5BwHs1/RtZY/6Ta0hrQOj9THv+mG9FPwgqdVKdLvdCLSyWfQ== + dependencies: + "@microsoft/1ds-core-js" "^3.2.10" + "@microsoft/1ds-post-js" "^3.2.10" + "@microsoft/applicationinsights-web-basic" "^3.0.0" + applicationinsights "2.6.0" + "@vscode/test-electron@^2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.1.5.tgz#ac98f8f445ea4590753f5fa0c7f6e4298f08c3b7" @@ -3440,6 +3690,44 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +applicationinsights@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-2.6.0.tgz#4df8b3ab932e832878eea47075932368338ca74c" + integrity sha512-ldeFvbocbRoMxS361lOwmLL3ltWfgNxALrttge6BrpsPMTStGzevoiqaWieIjZ/3qNmljOd+xmwaNPpBoefdmA== + dependencies: + "@azure/core-auth" "^1.4.0" + "@azure/core-rest-pipeline" "1.10.1" + "@azure/core-util" "1.2.0" + "@azure/opentelemetry-instrumentation-azure-sdk" "^1.0.0-beta.3" + "@microsoft/applicationinsights-web-snippet" "^1.0.1" + "@opentelemetry/api" "^1.0.4" + "@opentelemetry/core" "^1.12.0" + "@opentelemetry/sdk-trace-base" "^1.12.0" + "@opentelemetry/semantic-conventions" "^1.12.0" + cls-hooked "^4.2.2" + continuation-local-storage "^3.2.1" + diagnostic-channel "1.1.0" + diagnostic-channel-publishers "1.0.6" + +applicationinsights@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-2.7.0.tgz#b397b750e788c010d564c3ef7f5ce6e62227b425" + integrity sha512-/vV5X6M4TlRA5NxNZAdCE0gukzfK24mb3z18D5Kl/CyIfSVIkafsIji3mK+Zi5q+7dn6H1CkFazlcnLf40anHw== + dependencies: + "@azure/core-auth" "^1.4.0" + "@azure/core-rest-pipeline" "1.10.1" + "@azure/core-util" "1.2.0" + "@azure/opentelemetry-instrumentation-azure-sdk" "^1.0.0-beta.3" + "@microsoft/applicationinsights-web-snippet" "^1.0.1" + "@opentelemetry/api" "^1.0.4" + "@opentelemetry/core" "^1.12.0" + "@opentelemetry/sdk-trace-base" "^1.12.0" + "@opentelemetry/semantic-conventions" "^1.12.0" + cls-hooked "^4.2.2" + continuation-local-storage "^3.2.1" + diagnostic-channel "1.1.0" + diagnostic-channel-publishers "1.0.6" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3497,6 +3785,21 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-hook-jl@^1.7.6: + version "1.7.6" + resolved "https://registry.yarnpkg.com/async-hook-jl/-/async-hook-jl-1.7.6.tgz#4fd25c2f864dbaf279c610d73bf97b1b28595e68" + integrity sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg== + dependencies: + stack-chain "^1.3.7" + +async-listener@^0.6.0: + version "0.6.10" + resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" + integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== + dependencies: + semver "^5.3.0" + shimmer "^1.1.0" + async-retry@1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" @@ -4039,6 +4342,15 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +cls-hooked@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/cls-hooked/-/cls-hooked-4.2.2.tgz#ad2e9a4092680cdaffeb2d3551da0e225eae1908" + integrity sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw== + dependencies: + async-hook-jl "^1.7.6" + emitter-listener "^1.0.1" + semver "^5.4.1" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -4173,6 +4485,14 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" +continuation-local-storage@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" + integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== + dependencies: + async-listener "^0.6.0" + emitter-listener "^1.1.1" + conventional-changelog-angular@^5.0.12: version "5.0.13" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" @@ -4625,6 +4945,18 @@ detect-node-es@^1.1.0: resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== +diagnostic-channel-publishers@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-1.0.6.tgz#0e236cb4b7c4c81904b2e3741d0b16eff453dc5a" + integrity sha512-RE5AP4JmEm/CV06gOyFdgWWm3gMNOoXulod2mq4ysiz9s77ZhHb1P1DGrfePHjNOmgvWglhegmj5q8DNtjRrEg== + +diagnostic-channel@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-1.1.0.tgz#6985e9dfedfbc072d91dc4388477e4087147756e" + integrity sha512-fwujyMe1gj6rk6dYi9hMZm0c8Mz8NDMVl2LB4iaYh3+LIAThZC8RKFGXWG0IML2OxAit/ZFRgZhMkhQ3d/bobQ== + dependencies: + semver "^5.3.0" + diff-sequences@^27.4.0: version "27.4.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" @@ -4714,6 +5046,13 @@ electron-to-chromium@^1.4.172: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.185.tgz#3432d7944f1c5fe20664bb45d9cced2151405ce2" integrity sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw== +emitter-listener@^1.0.1, emitter-listener@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" + integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== + dependencies: + shimmer "^1.2.0" + emittery@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" @@ -5297,14 +5636,6 @@ fetch-blob@^3.1.2: dependencies: web-streams-polyfill "^3.0.3" -fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -5394,7 +5725,7 @@ form-data-encoder@1.7.1: resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== -form-data@4.0.0: +form-data@4.0.0, form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== @@ -5951,6 +6282,15 @@ http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: agent-base "6" debug "4" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http2-wrapper@^2.1.10: version "2.1.11" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.1.11.tgz#d7c980c7ffb85be3859b6a96c800b2951ae257ef" @@ -6020,6 +6360,13 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-in-the-middle@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.3.5.tgz#78384fbcfc7c08faf2b1f61cb94e7dd25651df9c" + integrity sha512-yzHlBqi1EBFrkieAnSt8eTgO5oLSl+YJ7qaOpUH/PMqQOMZoQ/RmDlwnTLQrwYto+gHYjRG+i/IbsB1eDx32NQ== + dependencies: + module-details-from-path "^1.0.3" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -6158,7 +6505,7 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-ci@3.0.1: +is-ci@3.0.1, is-ci@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== @@ -6172,6 +6519,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + is-core-module@^2.2.0: version "2.8.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" @@ -7517,6 +7871,11 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== +module-details-from-path@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" + integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -7559,11 +7918,6 @@ new-github-release-url@2.0.0: dependencies: type-fest "^2.5.1" -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - node-fetch-commonjs@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-fetch-commonjs/-/node-fetch-commonjs-3.1.1.tgz#e36db76b9fe13bdd44a5bafabc29c61d0f01b4e1" @@ -7588,20 +7942,16 @@ node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" - integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= +node-machine-id@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== + node-releases@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" @@ -8566,6 +8916,15 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-in-the-middle@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.1.1.tgz#2000741f7894322ebd4b82fc783880d5b5052d36" + integrity sha512-OScOjQjrrjhAdFpQmnkE/qbIBGCRFhQB/YaJhcC3CPOlmhe7llnW46Ac1J5+EjcNXOTnDdpF96Erw/yedsGksQ== + dependencies: + debug "^4.1.1" + module-details-from-path "^1.0.3" + resolve "^1.22.1" + resolve-alpn@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" @@ -8619,6 +8978,15 @@ resolve@^1.14.2, resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -8744,7 +9112,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -8830,6 +9198,11 @@ shelljs@0.8.5: interpret "^1.0.0" rechoir "^0.6.2" +shimmer@^1.1.0, shimmer@^1.2.0, shimmer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -8983,6 +9356,11 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +stack-chain@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285" + integrity sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug== + stack-utils@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" @@ -9365,6 +9743,11 @@ tslib@^2.1.0, tslib@^2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== + tslib@^2.4.1: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" @@ -9601,6 +9984,11 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" From 9e8d8e546f70535696a7ffff2f1db1d8eb5cc37c Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Sun, 2 Jul 2023 12:30:37 +0200 Subject: [PATCH 014/110] docs: improve readmes in progress --- Readme.md | 103 +++++++++++++++++++++++--------------- hero.md | 56 +++++++++++++++++++++ packages/cli/README.md | 66 ++++++++++++++++++------ packages/core/README.md | 66 ++++++++++++++++++++++-- packages/eslint/README.md | 53 ++++++++++++++++---- packages/vscode/README.md | 68 +++++++++++++++++++------ updateHero.js | 5 ++ 7 files changed, 334 insertions(+), 83 deletions(-) create mode 100644 hero.md create mode 100644 updateHero.js diff --git a/Readme.md b/Readme.md index 5a315dd..a7255ad 100644 --- a/Readme.md +++ b/Readme.md @@ -5,37 +5,77 @@

- Home Page | - Docs | - Roadmap | - Mission | + Website  •   + Docs   •   + Roadmap  •   + Mission  •   Playground

-

- Supercharged structural code search and replace tool -

+

Streamline your workflow by finding and linting complex code patterns effortlessly.

+ +___ + +# What is CodeQue? + +CodeQue is semantic code search engine that understands the code syntax. + +It matches code structurally which makes it excellent for more complex queries. + +Query language offers wildcards, partial matching and ignores code formatting. + +Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. + +Text search with handy wildcards is available for __every language__ and covers common regex search use cases. + +

Give it a try in + playground

+ +

Just paste code snippet to start searching, no installation needed!

+ +__Integrations__ + +CodeQue is available as: + +- [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. +- [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. + +CodeQue will be soon available as: + +- Duplicated code identification +- Batch code refactoring +- Advanced ESLint rules generator + +
+ +

🔔 Get notified 🔔

---- +
-## Overview 📣 + -**CodeQue** is structural code search tool for TypeScript and JavaScript projects. -CodeQue can be used to search for any code, from simple symbol search to complex multiline patterns. +## Visual Studio Code Extension 🔮 + +VScode extension aims to make your workflow more efficient. -It reduces struggle by providing accurate results regardless the formatting noise. +[👉 Read about features](https://github.com/codeque-co/codeque/tree/master/packages/vscode#readme) -It makes it easy to get familiar with codebase and helps make better decisions as a result. +[👉 Get VScode Extension from Marketplace](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) -You can also use it as a linter. +
-Find out more about the project on [codeque.co](https://codeque.co) +

Watch extension in action in 1 minute (external link) 👇

-## ESLint plugin 💅 + + + + +## ESLint integration 💅 Use CodeQue ESLint plugin to create custom rules in zero time. -Mark errors or warnings tailored to your codebase. +Mark errors or warnings tailored to your codebase to enforce common coding standards in your team. Installation 👇 @@ -43,7 +83,6 @@ Installation 👇 yarn add --dev @codeque/eslint-plugin ``` -> `@codeque/eslint-plugin` is currently in `beta` Usage ✨ @@ -70,32 +109,19 @@ Usage ✨

-## Visual Studio Code Extension 🔮 - -VScode extension aims to make you workflow more efficient. - -[Read about features](https://github.com/codeque-co/codeque/tree/master/packages/vscode#readme) - -[Get VScode Extension from Marketplace](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) - - -

Watch extension in action (external link) 👇

- - - - - ## CLI tool 🔥 -CodeQue can be used as a CLI tool +CodeQue can be also used as a CLI tool. -Installation 👇 +Use it to search code or utilize it in git hooks like pre-commit. + +__Installation 👇__ ```sh yarn global add @codeque/cli ``` -Usage 🕵️ +__Usage 🕵️__ ```sh codeque @@ -105,8 +131,3 @@ codeque Find more info in [`@codeque/cli` package docs](./packages/cli/README.md) - -## Other Platforms 🌶️ - -CodeQue will be soon available as: -- Cloud service and integrations for teams diff --git a/hero.md b/hero.md new file mode 100644 index 0000000..78f11a2 --- /dev/null +++ b/hero.md @@ -0,0 +1,56 @@ +

+ + + +
+

+

+ Website  •   + Docs   •   + Roadmap  •   + Mission  •   + Playground +

+ +

Streamline your workflow by finding and linting complex code patterns effortlessly.

+ +___ + +# What is CodeQue? + +CodeQue is semantic code search engine that understands the code syntax. + +It matches code structurally which makes it excellent for more complex queries. + +Query language offers wildcards, partial matching and ignores code formatting. + +Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. + +Text search with handy wildcards is available for __every language__ and covers common regex search use cases. + +

Give it a try in + playground

+ +

Just paste code snippet to start searching, no installation needed!

+ +__Integrations__ + +CodeQue is available as: + +- [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. +- [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. + +CodeQue will be soon available as: + +- Duplicated code identification +- Batch code refactoring +- Advanced ESLint rules generator + +
+ +

🔔 Get notified 🔔

+ +
+ + \ No newline at end of file diff --git a/packages/cli/README.md b/packages/cli/README.md index e936de2..71fbab2 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1,30 +1,66 @@ -

- CodeQue -

-

- Supercharged structural code search and replace tool + + + +
+

+

+ Website  •   + Docs   •   + Roadmap  •   + Mission  •   + Playground

---- +

Streamline your workflow by finding and linting complex code patterns effortlessly.

+ +___ + +# What is CodeQue? + +CodeQue is semantic code search engine that understands the code syntax. + +It matches code structurally which makes it excellent for more complex queries. + +Query language offers wildcards, partial matching and ignores code formatting. + +Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. + +Text search with handy wildcards is available for __every language__ and covers common regex search use cases. + +

Give it a try in + playground

+ +

Just paste code snippet to start searching, no installation needed!

+ +__Integrations__ + +CodeQue is available as: -## Overview 📣 +- [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. +- [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. -CodeQue is structural code search tool for TypeScript and JavaScript projects. +CodeQue will be soon available as: -CodeQue can be used to search for any code, from simple symbol search to complex multiline patterns. +- Duplicated code identification +- Batch code refactoring +- Advanced ESLint rules generator -It reduces struggle by providing accurate results regardless the formatting noise. +
-It makes it easy to get familiar with codebase and helps make better decisions as a result. +

🔔 Get notified 🔔

-You can also use it as a linter. +
-Find out more about the project on [codeque.co](https://codeque.co) + -[Try CodeQue Visual Studio Code Extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) +## CLI tool -[Get CodeQue ESLint plugin](https://www.npmjs.com/package/@codeque/eslint-plugin) and create custom linting rules in zero time. +CodeQue CLI is a complementary tool that can be used for +- Searching code patterns right from terminal including headless environments +- Building scripts to assert that some code patterns exist or not exist +- Enhancing git hooks to avoid committing or pushing unwanted code ## Installation 👇 diff --git a/packages/core/README.md b/packages/core/README.md index cc18155..bcdf8db 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,5 +1,65 @@ -It's internal CodeQue core package. +

+ + + +
+

+

+ Website  •   + Docs   •   + Roadmap  •   + Mission  •   + Playground +

-CodeQue is structural code search tool for TypeScript and JavaScript projects. +

Streamline your workflow by finding and linting complex code patterns effortlessly.

-Check [`@codeque/cli`](https://www.npmjs.com/package/@codeque/cli) \ No newline at end of file +___ + +# What is CodeQue? + +CodeQue is semantic code search engine that understands the code syntax. + +It matches code structurally which makes it excellent for more complex queries. + +Query language offers wildcards, partial matching and ignores code formatting. + +Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. + +Text search with handy wildcards is available for __every language__ and covers common regex search use cases. + +

Give it a try in + playground

+ +

Just paste code snippet to start searching, no installation needed!

+ +__Integrations__ + +CodeQue is available as: + +- [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. +- [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. + +CodeQue will be soon available as: + +- Duplicated code identification +- Batch code refactoring +- Advanced ESLint rules generator + +
+ +

🔔 Get notified 🔔

+ +
+ + + + +## `@codeque/core` + +It's internal package and it's not meant to be used directly. + +The exposed API might have breaking changes between releases. + +To use CodeQue check available platforms listed above. \ No newline at end of file diff --git a/packages/eslint/README.md b/packages/eslint/README.md index a421d82..d5d1f66 100644 --- a/packages/eslint/README.md +++ b/packages/eslint/README.md @@ -5,22 +5,57 @@

- Home Page | - Docs | - Roadmap | - Mission | + Website  •   + Docs   •   + Roadmap  •   + Mission  •   Playground

-# CodeQue - structural search engine for JavaScript and TypeScript +

Streamline your workflow by finding and linting complex code patterns effortlessly.

-CodeQue is code search engine that understands the code syntax. +___ -It matches structure rather than plain text, which makes it very effective for complex queries. +# What is CodeQue? -It's available as [CLI](https://www.npmjs.com/package/@codeque/cli), [Visual Studio Code Extension](https://codeque.co/r/vsc), and ESLint plugin. +CodeQue is semantic code search engine that understands the code syntax. -## ESLint plugin +It matches code structurally which makes it excellent for more complex queries. + +Query language offers wildcards, partial matching and ignores code formatting. + +Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. + +Text search with handy wildcards is available for __every language__ and covers common regex search use cases. + +

Give it a try in + playground

+ +

Just paste code snippet to start searching, no installation needed!

+ +__Integrations__ + +CodeQue is available as: + +- [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. +- [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. + +CodeQue will be soon available as: + +- Duplicated code identification +- Batch code refactoring +- Advanced ESLint rules generator + +
+ +

🔔 Get notified 🔔

+ +
+ + + +## ESLint integration 💅 Using CodeQue ESLint plugin you can create your own custom linting rules in zero time. diff --git a/packages/vscode/README.md b/packages/vscode/README.md index 2df420e..58a1650 100644 --- a/packages/vscode/README.md +++ b/packages/vscode/README.md @@ -5,46 +5,84 @@

- Home Page | - Docs | - Roadmap | - Mission | + Website  •   + Docs   •   + Roadmap  •   + Mission  •   Playground

-# CodeQue - multiline and structural code search for Visual Studio Code +

Streamline your workflow by finding and linting complex code patterns effortlessly.

-CodeQue is code search engine that understands the code syntax. +___ -It matches structure rather than plain text, which makes it very effective for complex queries. +# What is CodeQue? +CodeQue is semantic code search engine that understands the code syntax. + +It matches code structurally which makes it excellent for more complex queries. + +Query language offers wildcards, partial matching and ignores code formatting. + +Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. + +Text search with handy wildcards is available for __every language__ and covers common regex search use cases. + +

Give it a try in + playground

+ +

Just paste code snippet to start searching, no installation needed!

+ +__Integrations__ + +CodeQue is available as: + +- [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. +- [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code, creating git hooks and more. + +CodeQue will be soon available as: + +- Duplicated code identification +- Batch code refactoring +- Advanced ESLint rules generator + +
+ +

🔔 Get notified 🔔

+ +
+ + + +## CodeQue - multiline and structural code search for Visual Studio Code VSCode extension aims to improve code search and navigation experience. -Advanced search options and todo-like list of accurate search results makes it your new super power. -It's one of the tools in the ecosystem. There is also [CLI tool](https://www.npmjs.com/package/@codeque/cli) and [ESLint plugin](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom rules in zero time. -CodeQue supports multiline code search for any programming language and structural code search for JavaScript and TypeScript. +Advanced search options and todo-like list of accurate search results makes it your new super power. + +CodeQue supports multiline code search for every programming language and structural code search for JavaScript and TypeScript. Structural search support for other programming languages will be added soon. -
+
-

Click to watch extension in action 👇

+

Watch extension in action in 1 minute (external link) 👇

- + ## Benefits of using CodeQue VSCode extension CodeQue is more than just a search tool - it's a refactoring tool as well. -It addresses the problems of standard search by providing multiline support and an easy way to add gaps or use wildcards into the query. +It addresses the problems of standard search by providing multiline support and offers an easy way to add gaps or use wildcards in the query. You don't need to have any knowledge of Regular Expressions to query complex code patterns. -It helps developers with code refactoring, speeds up project discovery, and makes it easy to find duplicated or similar code. patterns. +It helps developers with code refactoring, speeds up project discovery, and makes it easy to find duplicated or similar code patterns. With CodeQue, you can easily navigate and modify your codebase, making your development process faster and more efficient. diff --git a/updateHero.js b/updateHero.js new file mode 100644 index 0000000..f1a01af --- /dev/null +++ b/updateHero.js @@ -0,0 +1,5 @@ +const fs = require('fs') +const path = require('path') + +const cwd = process.cwd() +const mainReadme = path.join() From 96db9b572cf86bd4b310a5bff7b226210c1420a9 Mon Sep 17 00:00:00 2001 From: "Jakub Mazurek (@jayu)" Date: Sun, 2 Jul 2023 12:48:19 +0200 Subject: [PATCH 015/110] chore: add script to align readmes --- .gitignore | 4 +- Readme.md | 37 +++++++--- package.json | 3 +- packages/cli/README.md | 23 +++++-- packages/core/README.md | 26 ++++--- packages/eslint/README.md | 34 ++++++--- packages/vscode/README.md | 46 +++++++------ packages/vscode/package.json | 2 +- readmePartials/eslintIntro.md | 12 ++++ readmePartials/footer.md | 9 +++ hero.md => readmePartials/hero.md | 13 ++-- syncReadmes.js | 111 ++++++++++++++++++++++++++++++ tsconfig.json | 6 +- updateHero.js | 5 -- 14 files changed, 258 insertions(+), 73 deletions(-) create mode 100644 readmePartials/eslintIntro.md create mode 100644 readmePartials/footer.md rename hero.md => readmePartials/hero.md (77%) create mode 100644 syncReadmes.js delete mode 100644 updateHero.js diff --git a/.gitignore b/.gitignore index 01a13fb..dbd06bc 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,6 @@ devFile *.snapshot.json dist *.temp -.vscode/settings.json \ No newline at end of file +.vscode/settings.json +*.tgz +*.tar.gz \ No newline at end of file diff --git a/Readme.md b/Readme.md index a7255ad..bd49937 100644 --- a/Readme.md +++ b/Readme.md @@ -24,9 +24,9 @@ It matches code structurally which makes it excellent for more complex queries. Query language offers wildcards, partial matching and ignores code formatting. -Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. +Structural code search is available for JavaScript, TypesScript, HTML, CSS and more soon. -Text search with handy wildcards is available for __every language__ and covers common regex search use cases. +Text code search with handy wildcards is available for __every language__ and covers common regex search use cases.

Give it a try in playground

@@ -39,23 +39,23 @@ CodeQue is available as: - [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. - [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. -- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more including headless environments. CodeQue will be soon available as: - Duplicated code identification - Batch code refactoring -- Advanced ESLint rules generator +- Advanced ESLint rules creator -
-

🔔 Get notified 🔔

+

🔔 Get notified 🔔

+ +

All CodeQue tools operate offline hence code never leaves your local environment.


- ## Visual Studio Code Extension 🔮 VScode extension aims to make your workflow more efficient. @@ -72,10 +72,20 @@ VScode extension aims to make your workflow more efficient. +
+ + ## ESLint integration 💅 -Use CodeQue ESLint plugin to create custom rules in zero time. -Mark errors or warnings tailored to your codebase to enforce common coding standards in your team. +Using CodeQue ESLint plugin you can create your own custom linting rules in zero time. + +Custom ESLint rules can help execute on long-term refactors or prevent introducing codebase specific bugs or bad patterns. + +Rules can replace your decision log and help standardizing coding conventions across the project or organization. + +CodeQue ESLint integration is a no-brainier for any team willing to improve their codebase quality. + + Installation 👇 @@ -131,3 +141,12 @@ codeque Find more info in [`@codeque/cli` package docs](./packages/cli/README.md) + + +## Support and feedback + +Feel free to use [Github Issues](https://github.com/codeque-co/codeque/issues) +to +- ask for help with writing a query +- report a bug or doubt +- suggest feature or improvement \ No newline at end of file diff --git a/package.json b/package.json index 542ad5c..18eb68c 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "typecheck": "yarn workspaces run typecheck", "test": "yarn workspaces run test", "checks": "yarn typecheck && yarn lint && yarn test", - "postinstall": "node fix-framer-motion.js" + "postinstall": "node fix-framer-motion.js", + "syncReadmes": "node ./syncReadmes.js" } } diff --git a/packages/cli/README.md b/packages/cli/README.md index 71fbab2..ecec1b7 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -24,9 +24,9 @@ It matches code structurally which makes it excellent for more complex queries. Query language offers wildcards, partial matching and ignores code formatting. -Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. +Structural code search is available for JavaScript, TypesScript, HTML, CSS and more soon. -Text search with handy wildcards is available for __every language__ and covers common regex search use cases. +Text code search with handy wildcards is available for __every language__ and covers common regex search use cases.

Give it a try in playground

@@ -39,17 +39,18 @@ CodeQue is available as: - [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. - [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. -- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more including headless environments. CodeQue will be soon available as: - Duplicated code identification - Batch code refactoring -- Advanced ESLint rules generator +- Advanced ESLint rules creator -
-

🔔 Get notified 🔔

+

🔔 Get notified 🔔

+ +

All CodeQue tools operate offline hence code never leaves your local environment.


@@ -178,3 +179,13 @@ codeque [options] - `-ogi, --omitGitIgnore` - Search files regardless .gitignore settings (_optional_) - `-ae, --allExtensions` - Search in all file extensions. Useful for text search mode. (_optional_) + + + +## Support and feedback + +Feel free to use [Github Issues](https://github.com/codeque-co/codeque/issues) +to +- ask for help with writing a query +- report a bug or doubt +- suggest feature or improvement \ No newline at end of file diff --git a/packages/core/README.md b/packages/core/README.md index bcdf8db..79a7f88 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -24,9 +24,9 @@ It matches code structurally which makes it excellent for more complex queries. Query language offers wildcards, partial matching and ignores code formatting. -Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. +Structural code search is available for JavaScript, TypesScript, HTML, CSS and more soon. -Text search with handy wildcards is available for __every language__ and covers common regex search use cases. +Text code search with handy wildcards is available for __every language__ and covers common regex search use cases.

Give it a try in playground

@@ -39,27 +39,37 @@ CodeQue is available as: - [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. - [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. -- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more including headless environments. CodeQue will be soon available as: - Duplicated code identification - Batch code refactoring -- Advanced ESLint rules generator +- Advanced ESLint rules creator -
-

🔔 Get notified 🔔

+

🔔 Get notified 🔔

+ +

All CodeQue tools operate offline hence code never leaves your local environment.


- ## `@codeque/core` It's internal package and it's not meant to be used directly. The exposed API might have breaking changes between releases. -To use CodeQue check available platforms listed above. \ No newline at end of file +To use CodeQue check available platforms listed above. + + + +## Support and feedback + +Feel free to use [Github Issues](https://github.com/codeque-co/codeque/issues) +to +- ask for help with writing a query +- report a bug or doubt +- suggest feature or improvement \ No newline at end of file diff --git a/packages/eslint/README.md b/packages/eslint/README.md index d5d1f66..226ec4a 100644 --- a/packages/eslint/README.md +++ b/packages/eslint/README.md @@ -24,9 +24,9 @@ It matches code structurally which makes it excellent for more complex queries. Query language offers wildcards, partial matching and ignores code formatting. -Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. +Structural code search is available for JavaScript, TypesScript, HTML, CSS and more soon. -Text search with handy wildcards is available for __every language__ and covers common regex search use cases. +Text code search with handy wildcards is available for __every language__ and covers common regex search use cases.

Give it a try in playground

@@ -39,31 +39,35 @@ CodeQue is available as: - [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. - [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. -- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more, also in headless environments. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more including headless environments. CodeQue will be soon available as: - Duplicated code identification - Batch code refactoring -- Advanced ESLint rules generator +- Advanced ESLint rules creator -
-

🔔 Get notified 🔔

+

🔔 Get notified 🔔

+ +

All CodeQue tools operate offline hence code never leaves your local environment.


- + + ## ESLint integration 💅 Using CodeQue ESLint plugin you can create your own custom linting rules in zero time. Custom ESLint rules can help execute on long-term refactors or prevent introducing codebase specific bugs or bad patterns. -Rules can replace your decision log and help standardizing coding conventions across the project. +Rules can replace your decision log and help standardizing coding conventions across the project or organization. + +CodeQue ESLint integration is a no-brainier for any team willing to improve their codebase quality. -CodeQue is a no-brainier for any team willing to improve their codebase quality. + ## Installation @@ -169,4 +173,14 @@ Plugin collects completely anonymous telemetry that helps me get insights about It's implemented using `applicationinsights` and you can easily opt-out. -Learn more about [telemetry](https://codeque.co/docs/telemetry#es-lint-plugin) \ No newline at end of file +Learn more about [telemetry](https://codeque.co/docs/telemetry#es-lint-plugin) + + + +## Support and feedback + +Feel free to use [Github Issues](https://github.com/codeque-co/codeque/issues) +to +- ask for help with writing a query +- report a bug or doubt +- suggest feature or improvement \ No newline at end of file diff --git a/packages/vscode/README.md b/packages/vscode/README.md index 58a1650..1801c05 100644 --- a/packages/vscode/README.md +++ b/packages/vscode/README.md @@ -24,9 +24,9 @@ It matches code structurally which makes it excellent for more complex queries. Query language offers wildcards, partial matching and ignores code formatting. -Structural search is available for JavaScript, TypesScript, HTML, CSS and more soon. +Structural code search is available for JavaScript, TypesScript, HTML, CSS and more soon. -Text search with handy wildcards is available for __every language__ and covers common regex search use cases. +Text code search with handy wildcards is available for __every language__ and covers common regex search use cases.

Give it a try in playground

@@ -39,17 +39,18 @@ CodeQue is available as: - [VSCode extension](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque) for enhanced code search and navigation experience. - [ESLint integration](https://www.npmjs.com/package/@codeque/eslint-plugin) for creating custom linting rules in zero time. -- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code, creating git hooks and more. +- [CLI tool](https://www.npmjs.com/package/@codeque/cli) for searching code and more including headless environments. CodeQue will be soon available as: - Duplicated code identification - Batch code refactoring -- Advanced ESLint rules generator +- Advanced ESLint rules creator -
-

🔔 Get notified 🔔

+

🔔 Get notified 🔔

+ +

All CodeQue tools operate offline hence code never leaves your local environment.


@@ -58,13 +59,11 @@ CodeQue will be soon available as: ## CodeQue - multiline and structural code search for Visual Studio Code VSCode extension aims to improve code search and navigation experience. - - -Advanced search options and todo-like list of accurate search results makes it your new super power. +Advanced code search options and todo-like list of accurate search results makes it your new super power. CodeQue supports multiline code search for every programming language and structural code search for JavaScript and TypeScript. -Structural search support for other programming languages will be added soon. +Structural code search support for other programming languages will be added soon.
@@ -245,7 +244,7 @@ You can check search error details in tooltip available after click the error co ## Query examples -CodeQue is general purpose search tool. The examples list could be endless. Here are some of them for you to get a glimpse of what's possible. Those are relatively simple, you definitely would find some more complex during day to day work. +CodeQue is general purpose code search tool. The examples list could be endless. Here are some of them for you to get a glimpse of what's possible. Those are relatively simple, you definitely would find some more complex during day to day work. > Don't know how to write a query? [Open an issue on GitHub](https://github.com/codeque-co/codeque/issues) ! @@ -281,7 +280,7 @@ More specifically it will match all objects with at least one address entry with ### React component with specific props combination -I found it very useful to find props with specific props combination. Sometimes props depends on each other and we might want to refactor some of them, but how do we determine whether they are used together? We can review long list of results for basic search, but who has time for that 😉 +I found it very useful to find props with specific props combination. Sometimes props depends on each other and we might want to refactor some of them, but how do we determine whether they are used together? We can review long list of results for basic code search, but who has time for that 😉 ```tsx

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�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