|
1 | 1 | import * as vscode from 'vscode'; |
2 | 2 |
|
3 | | -const INCLUDED_EXTENSIONS = ['cpp', 'h', 'c', 'cxx', 'hpp', 'py', 'lua', 'ls', 'lh', 'ts', 'js']; |
4 | | -const EXCLUDED_DIRECTORIES = ['node_modules', '.git', 'build', 'dist', 'out', 'vendor']; |
| 3 | +// 配置常量 |
| 4 | +const ALLOWED_FILENAMES = ['package.json']; // 文件名白名单 |
| 5 | +const INCLUDED_EXTENSIONS = ['cpp', 'h', 'c', 'cxx', 'hpp', 'py', 'lua', 'ls', 'lh', 'ts', 'js']; // 扩展名白名单 |
| 6 | +const EXCLUDED_DIRECTORIES = ['node_modules', '.git', 'build', 'dist', 'out', 'vendor']; // 排除目录 |
5 | 7 |
|
6 | 8 | /** |
7 | 9 | * 显示文件选择器,并返回用户选择的文件列表 |
8 | 10 | * @returns 用户选择的文件路径数组 |
9 | 11 | */ |
10 | 12 | export async function selectFiles(): Promise<string[]> { |
| 13 | + // 检查是否打开了工作区 |
11 | 14 | const workspaceFolders = vscode.workspace.workspaceFolders; |
12 | 15 | if (!workspaceFolders) { |
13 | 16 | vscode.window.showErrorMessage('No workspace folder found.'); |
14 | 17 | return []; |
15 | 18 | } |
16 | 19 |
|
17 | | - // 生成文件匹配模式和排除模式 |
18 | | - const filePattern = `**/*.{${INCLUDED_EXTENSIONS.join(',')}}`; |
19 | 20 | const excludePattern = `{${EXCLUDED_DIRECTORIES.map(dir => `**/${dir}/**`).join(',')}}`; |
20 | 21 |
|
21 | | - // 获取当前目录下的所有源文件,并排除指定目录 |
22 | | - const files = await vscode.workspace.findFiles(filePattern, excludePattern); |
23 | | - const filePaths = files.map(file => file.fsPath); |
| 22 | + // 1. 匹配白名单文件名 |
| 23 | + const filenamePattern = `**/{${ALLOWED_FILENAMES.join(',')}}`; |
| 24 | + const filenameFiles = await vscode.workspace.findFiles(filenamePattern, excludePattern); |
24 | 25 |
|
25 | | - // 显示文件选择面板 |
26 | | - const selectedItems = await vscode.window.showQuickPick(filePaths, { |
| 26 | + // 2. 匹配扩展名文件,并排除指定目录 |
| 27 | + const extensionPattern = `**/*.{${INCLUDED_EXTENSIONS.join(',')}}`; |
| 28 | + const extensionFiles = await vscode.workspace.findFiles(extensionPattern, excludePattern); |
| 29 | + |
| 30 | + // 3. 合并结果并去重 |
| 31 | + const allFiles = [...filenameFiles, ...extensionFiles]; |
| 32 | + const uniqueFiles = Array.from(new Set(allFiles.map(file => file.fsPath))); |
| 33 | + |
| 34 | + // 4. 显示文件选择面板 |
| 35 | + const selectedItems = await vscode.window.showQuickPick(uniqueFiles, { |
27 | 36 | placeHolder: 'Select files to include in the refactoring', |
28 | 37 | canPickMany: true, // 允许多选 |
29 | 38 | }); |
30 | 39 |
|
| 40 | + // 返回用户选择的文件 |
31 | 41 | if (selectedItems) { |
32 | 42 | vscode.window.showInformationMessage(`Selected ${selectedItems.length} files.`); |
33 | 43 | return selectedItems; |
|
0 commit comments