From dfc13e312cd6b15ced4e6fdca3392e3de6f2f5ad Mon Sep 17 00:00:00 2001 From: chess99 Date: Sun, 12 Jan 2025 17:22:49 +0800 Subject: [PATCH 1/2] Add `miniprogram` plugin --- .../plugins/miniprogram/app-project/app.js | 10 + .../plugins/miniprogram/app-project/app.json | 23 ++ .../plugins/miniprogram/app-project/app.wxss | 5 + .../components/unused-button/index.js | 6 + .../components/unused-button/index.json | 3 + .../components/unused-counter/index.json | 3 + .../components/unused-counter/index.ts | 15 ++ .../components/used-footer/index.js | 5 + .../components/used-footer/index.json | 3 + .../app-project/images/unused-logo.png | 1 + .../app-project/images/used-icon.png | 1 + .../app-project/images/used-logo.png | 1 + .../plugins/miniprogram/app-project/knip.json | 9 + .../miniprogram/app-project/package.json | 7 + .../app-project/pages/index/helper.wxs | 7 + .../app-project/pages/index/index.json | 8 + .../app-project/pages/index/index.ts | 13 ++ .../app-project/pages/index/index.wxml | 16 ++ .../app-project/pages/index/index.wxss | 6 + .../app-project/pages/index/used-date.wxs | 8 + .../miniprogram/app-project/sitemap.json | 15 ++ .../app-project/styles/unused-theme.wxss | 4 + .../app-project/styles/used-theme.wxss | 4 + .../app-project/templates/unused-card.wxml | 6 + .../app-project/templates/used-item.wxml | 3 + .../app-project/wxs/unused-format.wxs | 7 + packages/knip/schema.json | 4 + packages/knip/src/compilers/index.ts | 5 + packages/knip/src/compilers/miniprogram.ts | 24 ++ packages/knip/src/plugins/index.ts | 2 + .../knip/src/plugins/miniprogram/README.md | 208 ++++++++++++++++++ .../knip/src/plugins/miniprogram/index.ts | 115 ++++++++++ .../knip/src/plugins/miniprogram/parser.ts | 89 ++++++++ .../knip/src/plugins/miniprogram/types.ts | 60 +++++ .../knip/src/plugins/miniprogram/utils.ts | 206 +++++++++++++++++ packages/knip/src/schema/plugins.ts | 1 + packages/knip/src/types/PluginNames.ts | 2 + .../knip/src/util/get-referenced-inputs.ts | 3 +- .../plugins/miniprogram/miniprogram.test.ts | 52 +++++ .../test/plugins/miniprogram/parser.test.ts | 94 ++++++++ .../test/plugins/miniprogram/utils.test.ts | 104 +++++++++ 41 files changed, 1156 insertions(+), 2 deletions(-) create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/app.js create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/app.json create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/app.wxss create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-button/index.js create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-button/index.json create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-counter/index.json create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-counter/index.ts create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/components/used-footer/index.js create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/components/used-footer/index.json create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/images/unused-logo.png create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/images/used-icon.png create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/images/used-logo.png create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/knip.json create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/package.json create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/helper.wxs create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.json create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.ts create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.wxml create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.wxss create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/used-date.wxs create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/sitemap.json create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/styles/unused-theme.wxss create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/styles/used-theme.wxss create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/templates/unused-card.wxml create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/templates/used-item.wxml create mode 100644 packages/knip/fixtures/plugins/miniprogram/app-project/wxs/unused-format.wxs create mode 100644 packages/knip/src/compilers/miniprogram.ts create mode 100644 packages/knip/src/plugins/miniprogram/README.md create mode 100644 packages/knip/src/plugins/miniprogram/index.ts create mode 100644 packages/knip/src/plugins/miniprogram/parser.ts create mode 100644 packages/knip/src/plugins/miniprogram/types.ts create mode 100644 packages/knip/src/plugins/miniprogram/utils.ts create mode 100644 packages/knip/test/plugins/miniprogram/miniprogram.test.ts create mode 100644 packages/knip/test/plugins/miniprogram/parser.test.ts create mode 100644 packages/knip/test/plugins/miniprogram/utils.test.ts diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/app.js b/packages/knip/fixtures/plugins/miniprogram/app-project/app.js new file mode 100644 index 000000000..3a8e24531 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/app.js @@ -0,0 +1,10 @@ +App({ + onLaunch() { + // Create worker + const worker = wx.createWorker('workers/request'); + + worker.onMessage((msg) => { + console.log(msg); + }); + } +}); \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/app.json b/packages/knip/fixtures/plugins/miniprogram/app-project/app.json new file mode 100644 index 000000000..25ddf9f54 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/app.json @@ -0,0 +1,23 @@ +{ + "pages": [ + "pages/index/index" + ], + "window": { + "navigationBarTitleText": "Mini Program" + }, + "usingComponents": { + "missing-header": "/components/missing-header/index", + "used-footer": "/components/used-footer/index" + }, + "workers": "workers/missing-worker.ts", + "tabBar": { + "list": [ + { + "pagePath": "pages/index/index", + "text": "Home", + "iconPath": "images/missing-icon.png", + "selectedIconPath": "images/used-icon.png" + } + ] + } +} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/app.wxss b/packages/knip/fixtures/plugins/miniprogram/app-project/app.wxss new file mode 100644 index 000000000..e157fdc37 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/app.wxss @@ -0,0 +1,5 @@ +@import "/styles/missing-theme"; + +page { + background: #f8f8f8; +} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-button/index.js b/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-button/index.js new file mode 100644 index 000000000..f5b3280a6 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-button/index.js @@ -0,0 +1,6 @@ +Component({ + properties: { + type: String, + text: String + } +}); \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-button/index.json b/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-button/index.json new file mode 100644 index 000000000..33aefde3a --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-button/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-counter/index.json b/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-counter/index.json new file mode 100644 index 000000000..33aefde3a --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-counter/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-counter/index.ts b/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-counter/index.ts new file mode 100644 index 000000000..c4a233eea --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/components/unused-counter/index.ts @@ -0,0 +1,15 @@ +interface IProps { + count: number; + onIncrement: () => void; +} + +Component({ + properties: { + count: Number + }, + methods: { + handleTap() { + this.triggerEvent('increment'); + } + } +}); \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/components/used-footer/index.js b/packages/knip/fixtures/plugins/miniprogram/app-project/components/used-footer/index.js new file mode 100644 index 000000000..5b6c7741a --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/components/used-footer/index.js @@ -0,0 +1,5 @@ +Component({ + properties: { + text: String + } +}); \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/components/used-footer/index.json b/packages/knip/fixtures/plugins/miniprogram/app-project/components/used-footer/index.json new file mode 100644 index 000000000..33aefde3a --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/components/used-footer/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/images/unused-logo.png b/packages/knip/fixtures/plugins/miniprogram/app-project/images/unused-logo.png new file mode 100644 index 000000000..cb2757f0e --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/images/unused-logo.png @@ -0,0 +1 @@ +// This is an empty file for testing unused image detection \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/images/used-icon.png b/packages/knip/fixtures/plugins/miniprogram/app-project/images/used-icon.png new file mode 100644 index 000000000..cb2757f0e --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/images/used-icon.png @@ -0,0 +1 @@ +// This is an empty file for testing unused image detection \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/images/used-logo.png b/packages/knip/fixtures/plugins/miniprogram/app-project/images/used-logo.png new file mode 100644 index 000000000..cb2757f0e --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/images/used-logo.png @@ -0,0 +1 @@ +// This is an empty file for testing unused image detection \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/knip.json b/packages/knip/fixtures/plugins/miniprogram/app-project/knip.json new file mode 100644 index 000000000..9c2feead0 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/knip.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://unpkg.com/knip@2/schema.json", + "paths": { + "@components/*": ["components/*"], + "@utils/*": ["utils/*"], + "@styles/*": ["styles/*"], + "~/*": ["*"] + } +} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/package.json b/packages/knip/fixtures/plugins/miniprogram/app-project/package.json new file mode 100644 index 000000000..64db009e0 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/package.json @@ -0,0 +1,7 @@ +{ + "name": "miniprogram-test", + "version": "1.0.0", + "devDependencies": { + "miniprogram-api-typings": "*" + } +} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/helper.wxs b/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/helper.wxs new file mode 100644 index 000000000..560591cf5 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/helper.wxs @@ -0,0 +1,7 @@ +var common = require('./missing-common.wxs'); +var usedDate = require('./used-date.wxs'); + +module.exports = { + format: common.format, + usedDate: usedDate.format +}; \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.json b/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.json new file mode 100644 index 000000000..131407b78 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.json @@ -0,0 +1,8 @@ +{ + "usingComponents": { + "missing-button": "@components/missing-button", + "missing-helper": "~/utils/missing-helper", + "missing-footer": "./missing-footer", + "used-counter": "../used-counter" + } +} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.ts b/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.ts new file mode 100644 index 000000000..05e990e79 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.ts @@ -0,0 +1,13 @@ +import { formatDate } from '~/utils/missing-date'; + +Page({ + data: { + now: Date.now(), + text: '' + }, + onLoad() { + this.setData({ + text: formatDate(this.data.now) + }); + } +}); \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.wxml b/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.wxml new file mode 100644 index 000000000..089198ac1 --- /dev/null +++ b/packages/knip/fixtures/plugins/miniprogram/app-project/pages/index/index.wxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + +