From defa4d28ce3b02f45bafd421388f5e26ed812eea Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Sat, 21 Sep 2024 00:56:44 +0800 Subject: [PATCH] perf(plugin-md-power): support more file-tree icons (#197) --- .../src/node/features/fileTree/definitions.ts | 228 +++++++++++++++++- .../src/node/features/fileTree/findIcon.ts | 7 +- 2 files changed, 228 insertions(+), 7 deletions(-) diff --git a/plugins/plugin-md-power/src/node/features/fileTree/definitions.ts b/plugins/plugin-md-power/src/node/features/fileTree/definitions.ts index 55361583..8b2133ea 100644 --- a/plugins/plugin-md-power/src/node/features/fileTree/definitions.ts +++ b/plugins/plugin-md-power/src/node/features/fileTree/definitions.ts @@ -54,10 +54,48 @@ export const definitions: Definitions = { astro: 'vscode-icons:file-type-light-astro', Astro: 'vscode-icons:file-type-light-astro', + vitest: 'vscode-icons:file-type-vitest', + Vitest: 'vscode-icons:file-type-vitest', + playwright: 'vscode-icons:file-type-playwright', + Playwright: 'vscode-icons:file-type-playwright', + jest: 'vscode-icons:file-type-jest', + Jest: 'vscode-icons:file-type-jest', + cypress: 'vscode-icons:file-type-cypress', + Cypress: 'vscode-icons:file-type-cypress', + + docker: 'vscode-icons:file-type-docker', + Docker: 'vscode-icons:file-type-docker', + // TODO: code group title icons // programming languages html: 'vscode-icons:file-type-html', + Html: 'vscode-icons:file-type-html', HTML: 'vscode-icons:file-type-html', + javascript: 'vscode-icons:file-type-js-official', + Javascript: 'vscode-icons:file-type-js-official', + JavaScript: 'vscode-icons:file-type-js-official', + js: 'vscode-icons:file-type-js-official', + JS: 'vscode-icons:file-type-js-official', + typescript: 'vscode-icons:file-type-typescript-official', + Typescript: 'vscode-icons:file-type-typescript-official', + TypeScript: 'vscode-icons:file-type-typescript-official', + ts: 'vscode-icons:file-type-typescript-official', + TS: 'vscode-icons:file-type-typescript-official', + css: 'vscode-icons:file-type-css', + CSS: 'vscode-icons:file-type-css', + less: 'vscode-icons:file-type-less', + Less: 'vscode-icons:file-type-less', + scss: 'vscode-icons:file-type-scss', + Scss: 'vscode-icons:file-type-scss', + SCSS: 'vscode-icons:file-type-scss', + sass: 'vscode-icons:file-type-sass', + Sass: 'vscode-icons:file-type-sass', + SASS: 'vscode-icons:file-type-sass', + stylus: 'vscode-icons:file-type-light-stylus', + Stylus: 'vscode-icons:file-type-light-stylus', + postcss: 'vscode-icons:file-type-postcss', + Postcss: 'vscode-icons:file-type-postcss', + PostCSS: 'vscode-icons:file-type-postcss', java: 'vscode-icons:file-type-java', Java: 'vscode-icons:file-type-java', JAVA: 'vscode-icons:file-type-java', @@ -67,40 +105,147 @@ export const definitions: Definitions = { C: 'vscode-icons:file-type-c', python: 'vscode-icons:file-type-python', Python: 'vscode-icons:file-type-python', + kotlin: 'vscode-icons:file-type-kotlin', + Kotlin: 'vscode-icons:file-type-kotlin', + go: 'vscode-icons:file-type-go-gopher', + golang: 'vscode-icons:file-type-go-gopher', + Go: 'vscode-icons:file-type-go-gopher', + GoLang: 'vscode-icons:file-type-go-gopher', + rust: 'vscode-icons:file-type-rust', + Rust: 'vscode-icons:file-type-rust', + zig: 'vscode-icons:file-type-zig', + Zig: 'vscode-icons:file-type-zig', + swift: 'vscode-icons:file-type-swift', + Swift: 'vscode-icons:file-type-swift', }, folders: { 'default': 'vscode-icons:default-folder', + 'src': 'vscode-icons:folder-type-src', - 'dist': 'vscode-icons:folder-type-dist', - 'docs': 'vscode-icons:folder-type-docs', - 'scripts': 'vscode-icons:folder-type-script', - 'shared': 'vscode-icons:folder-type-shared', - 'cli': 'vscode-icons:folder-type-cli', + 'srcs': 'vscode-icons:folder-type-src', + 'source': 'vscode-icons:folder-type-src', + 'sources': 'vscode-icons:folder-type-src', + 'code': 'vscode-icons:folder-type-src', 'tauri-src': 'vscode-icons:folder-type-tauri', + + 'dist': 'vscode-icons:folder-type-dist', + 'out': 'vscode-icons:folder-type-dist', + 'output': 'vscode-icons:folder-type-dist', + 'release': 'vscode-icons:folder-type-dist', + 'bin': 'vscode-icons:folder-type-dist', + 'distribution': 'vscode-icons:folder-type-dist', + + 'docs': 'vscode-icons:folder-type-docs', + 'doc': 'vscode-icons:folder-type-docs', + 'document': 'vscode-icons:folder-type-docs', + 'documents': 'vscode-icons:folder-type-docs', + 'documentation': 'vscode-icons:folder-type-docs', + 'post': 'vscode-icons:folder-type-docs', + 'posts': 'vscode-icons:folder-type-docs', + 'article': 'vscode-icons:folder-type-docs', + 'articles': 'vscode-icons:folder-type-docs', + + 'scripts': 'vscode-icons:folder-type-script', + 'script': 'vscode-icons:folder-type-script', + + 'node_modules': 'vscode-icons:folder-type-light-node', + + 'cli': 'vscode-icons:folder-type-cli', + 'template': 'vscode-icons:folder-type-template', 'templates': 'vscode-icons:folder-type-template', + 'theme': 'vscode-icons:folder-type-theme', 'themes': 'vscode-icons:folder-type-theme', + 'color': 'vscode-icons:folder-type-theme', + 'colors': 'vscode-icons:folder-type-theme', + 'design': 'vscode-icons:folder-type-theme', + 'designs': 'vscode-icons:folder-type-theme', + 'packages': 'vscode-icons:folder-type-package', - 'tools': 'vscode-icons:folder-type-tools', + 'package': 'vscode-icons:folder-type-package', + 'pkg': 'vscode-icons:folder-type-package', + 'pkgs': 'vscode-icons:folder-type-package', + + 'shared': 'vscode-icons:folder-type-shared', 'utils': 'vscode-icons:folder-type-tools', + 'util': 'vscode-icons:folder-type-tools', + 'utility': 'vscode-icons:folder-type-tools', + 'utilities': 'vscode-icons:folder-type-tools', 'helper': 'vscode-icons:folder-type-helper', 'helpers': 'vscode-icons:folder-type-helper', + 'tools': 'vscode-icons:folder-type-tools', + 'toolkit': 'vscode-icons:folder-type-tools', + 'toolkits': 'vscode-icons:folder-type-tools', + 'tooling': 'vscode-icons:folder-type-tools', + 'devtools': 'vscode-icons:folder-type-tools', 'component': 'vscode-icons:folder-type-component', 'components': 'vscode-icons:folder-type-component', 'Component': 'vscode-icons:folder-type-component', 'Components': 'vscode-icons:folder-type-component', + 'widget': 'vscode-icons:folder-type-component', + 'widgets': 'vscode-icons:folder-type-component', + 'fragments': 'vscode-icons:folder-type-component', 'hooks': 'vscode-icons:folder-type-hook', 'composables': 'vscode-icons:folder-type-hook', 'public': 'vscode-icons:folder-type-public', + 'www': 'vscode-icons:folder-type-public', + 'web': 'vscode-icons:folder-type-public', + 'wwwroot': 'vscode-icons:folder-type-public', + 'website': 'vscode-icons:folder-type-public', + 'site': 'vscode-icons:folder-type-public', + 'browser': 'vscode-icons:folder-type-public', + 'browsers': 'vscode-icons:folder-type-public', + 'fonts': 'vscode-icons:folder-type-fonts', + 'font': 'vscode-icons:folder-type-fonts', + 'images': 'vscode-icons:folder-type-images', + 'image': 'vscode-icons:folder-type-images', + 'imgs': 'vscode-icons:folder-type-images', + 'img': 'vscode-icons:folder-type-images', + 'icon': 'vscode-icons:folder-type-images', + 'icons': 'vscode-icons:folder-type-images', + 'ico': 'vscode-icons:folder-type-images', + 'icos': 'vscode-icons:folder-type-images', + 'figure': 'vscode-icons:folder-type-images', + 'figures': 'vscode-icons:folder-type-images', + 'fig': 'vscode-icons:folder-type-images', + 'figs': 'vscode-icons:folder-type-images', + 'screenshot': 'vscode-icons:folder-type-images', + 'screenshots': 'vscode-icons:folder-type-images', + 'screengrab': 'vscode-icons:folder-type-images', + 'screengrabs': 'vscode-icons:folder-type-images', + 'pic': 'vscode-icons:folder-type-images', + 'pics': 'vscode-icons:folder-type-images', + 'picture': 'vscode-icons:folder-type-images', + 'pictures': 'vscode-icons:folder-type-images', + 'photo': 'vscode-icons:folder-type-images', + 'photos': 'vscode-icons:folder-type-images', + 'photograph': 'vscode-icons:folder-type-images', + 'photographs': 'vscode-icons:folder-type-images', + + 'asset': 'vscode-icons:folder-type-asset', + 'assets': 'vscode-icons:folder-type-asset', + 'resource': 'vscode-icons:folder-type-asset', + 'resources': 'vscode-icons:folder-type-asset', + 'res': 'vscode-icons:folder-type-asset', + 'static': 'vscode-icons:folder-type-asset', + 'report': 'vscode-icons:folder-type-asset', + 'reports': 'vscode-icons:folder-type-asset', + 'apis': 'vscode-icons:folder-type-api', + 'api': 'vscode-icons:folder-type-api', + 'restapi': 'vscode-icons:folder-type-api', + 'style': 'vscode-icons:folder-type-style', 'styles': 'vscode-icons:folder-type-style', + 'stylesheet': 'vscode-icons:folder-type-style', + 'stylesheets': 'vscode-icons:folder-type-style', + 'css': 'vscode-icons:folder-type-css', 'scss': 'vscode-icons:folder-type-light-sass', 'sass': 'vscode-icons:folder-type-light-sass', @@ -112,15 +257,34 @@ export const definitions: Definitions = { 'types': 'vscode-icons:folder-type-typings', 'mock': 'vscode-icons:folder-type-mock', + 'i18n': 'vscode-icons:folder-type-locale', 'locales': 'vscode-icons:folder-type-locale', 'locale': 'vscode-icons:folder-type-locale', + 'lang': 'vscode-icons:folder-type-locale', 'langs': 'vscode-icons:folder-type-locale', + 'language': 'vscode-icons:folder-type-locale', 'languages': 'vscode-icons:folder-type-locale', + 'l10n': 'vscode-icons:folder-type-locale', + 'localization': 'vscode-icons:folder-type-locale', + 'translation': 'vscode-icons:folder-type-locale', + 'translate': 'vscode-icons:folder-type-locale', + 'translations': 'vscode-icons:folder-type-locale', + 'tx': 'vscode-icons:folder-type-locale', 'config': 'vscode-icons:folder-type-config', 'configs': 'vscode-icons:folder-type-config', '.config': 'vscode-icons:folder-type-config', '.configs': 'vscode-icons:folder-type-config', + 'cfg': 'vscode-icons:folder-type-config', + 'cfgs': 'vscode-icons:folder-type-config', + 'conf': 'vscode-icons:folder-type-config', + 'confs': 'vscode-icons:folder-type-config', + 'configuration': 'vscode-icons:folder-type-config', + 'configurations': 'vscode-icons:folder-type-config', + 'setting': 'vscode-icons:folder-type-config', + 'settings': 'vscode-icons:folder-type-config', + 'option': 'vscode-icons:folder-type-config', + 'options': 'vscode-icons:folder-type-config', 'controller': 'vscode-icons:folder-type-controller', 'controllers': 'vscode-icons:folder-type-controller', @@ -134,17 +298,69 @@ export const definitions: Definitions = { 'services': 'vscode-icons:folder-type-services', 'Service': 'vscode-icons:folder-type-services', 'Services': 'vscode-icons:folder-type-services', + 'view': 'vscode-icons:folder-type-view', 'views': 'vscode-icons:folder-type-view', 'View': 'vscode-icons:folder-type-view', 'Views': 'vscode-icons:folder-type-view', + 'page': 'vscode-icons:folder-type-view', + 'pages': 'vscode-icons:folder-type-view', + 'html': 'vscode-icons:folder-type-html', + + 'app': 'vscode-icons:folder-type-app', + 'apps': 'vscode-icons:folder-type-app', + + 'client': 'vscode-icons:folder-type-client', + 'clients': 'vscode-icons:folder-type-client', + 'frontend': 'vscode-icons:folder-type-client', + 'frontends': 'vscode-icons:folder-type-client', + + 'server': 'vscode-icons:folder-type-server', + 'servers': 'vscode-icons:folder-type-server', + 'backend': 'vscode-icons:folder-type-server', + 'backends': 'vscode-icons:folder-type-server', 'db': 'vscode-icons:folder-type-db', 'database': 'vscode-icons:folder-type-db', + 'databases': 'vscode-icons:folder-type-db', + 'data': 'vscode-icons:folder-type-db', + 'sql': 'vscode-icons:folder-type-db', 'e2e': 'vscode-icons:folder-type-e2e', 'cypress': 'vscode-icons:folder-type-light-cypress', 'test': 'vscode-icons:folder-type-test', + 'tests': 'vscode-icons:folder-type-test', + 'testing': 'vscode-icons:folder-type-test', + 'snapshots': 'vscode-icons:folder-type-test', + 'spec': 'vscode-icons:folder-type-test', + 'specs': 'vscode-icons:folder-type-test', + + 'lib': 'vscode-icons:folder-type-library', + 'libs': 'vscode-icons:folder-type-library', + 'library': 'vscode-icons:folder-type-library', + 'libraries': 'vscode-icons:folder-type-library', + 'vendor': 'vscode-icons:folder-type-library', + 'vendors': 'vscode-icons:folder-type-library', + 'third-party': 'vscode-icons:folder-type-library', + 'lib64': 'vscode-icons:folder-type-library', + + 'include': 'vscode-icons:folder-type-include', + 'inc': 'vscode-icons:folder-type-include', + 'includes': 'vscode-icons:folder-type-include', + 'partial': 'vscode-icons:folder-type-include', + 'partials': 'vscode-icons:folder-type-include', + 'inc64': 'vscode-icons:folder-type-include', + + 'temp': 'vscode-icons:folder-type-temp', + 'tmp': 'vscode-icons:folder-type-temp', + 'cache': 'vscode-icons:folder-type-temp', + 'cached': 'vscode-icons:folder-type-temp', + '.temp': 'vscode-icons:folder-type-temp', + '.cache': 'vscode-icons:folder-type-temp', + + 'log': 'vscode-icons:folder-type-log', + 'logs': 'vscode-icons:folder-type-log', + 'logging': 'vscode-icons:folder-type-log', '.git': 'vscode-icons:folder-type-git', '.github': 'vscode-icons:folder-type-github', diff --git a/plugins/plugin-md-power/src/node/features/fileTree/findIcon.ts b/plugins/plugin-md-power/src/node/features/fileTree/findIcon.ts index eb593c4d..0ea390cb 100644 --- a/plugins/plugin-md-power/src/node/features/fileTree/findIcon.ts +++ b/plugins/plugin-md-power/src/node/features/fileTree/findIcon.ts @@ -10,7 +10,12 @@ export function getFileIcon(fileName: string, type: 'file' | 'folder' = 'file'): function getFileIconName(fileName: string, type: 'file' | 'folder' = 'file'): string | undefined { if (type === 'folder') { - return definitions.folders[fileName] + const icon = definitions.folders[fileName] + if (icon) + return icon + if (fileName.includes('/')) + return definitions.folders[fileName.slice(fileName.lastIndexOf('/') + 1)] + return } let icon: string | undefined = definitions.named[fileName] || definitions.files[fileName] if (icon)