vscode encontrar Los archivos no devuelven nada pero npm glob devuelve los resultados correctos
Estoy escribiendo y vscode extension en la que necesito una lista de los archivos de prueba dentro del espacio de trabajo.
Para encontrar los archivos de prueba que estoy usando el predeterminado testMatch
de la jest.config.js
que es:
[
'**/__tests__/**/*.[jt]s?(x)',
'**/?(*.)+(spec|test).[jt]s?(x)'
]
Mi problema es que vscode.workspace.findFiles
devuelve la matriz vacía y no puedo configurarlo para obtener resultados correctos, pero usando Glob
empaquetar la salida es correcta.
protected async findTestFiles(
matchTestsGlobPatterns: string[]
): Promise {
const testFilesUris: vscode.Uri[] = [];
const glob_testFilesUris: vscode.Uri[] = [];
const { name: workspaceName, workspaceFolders } = vscode.workspace;
if (workspaceName === undefined || workspaceFolders === undefined) {
throw new Error(`No active workspace${!workspaceFolders ? ' folders' : ''}.`);
}
for (let folderIdx = 0; folderIdx < workspaceFolders.length; folderIdx++) {
const folder = workspaceFolders[folderIdx];
// - by vscode.workspace.findFiles
for (let patternIdx = 0; patternIdx < matchTestsGlobPatterns.length; patternIdx++) {
const currentPattern = matchTestsGlobPatterns[patternIdx];
const pattern = new vscode.RelativePattern(
folder.uri.fsPath,
currentPattern
);
const files = await vscode.workspace.findFiles(
pattern,
'**/node_modules/**'
);
testFilesUris.push(...files);
}
console.log('by [vscode.workspace.findFiles]', testFilesUris.length);
// - by npm Glob
var glob = require('glob');
for (let patternIdx = 0; patternIdx < matchTestsGlobPatterns.length; patternIdx++) {
const currentPattern = matchTestsGlobPatterns[patternIdx];
const files: any[] = await new Promise((resolve, reject) => {
glob(
currentPattern,
{
absolute: true,
cwd: folder.uri.fsPath,
ignore: ['**/node_modules/**']
},
function (err: Error, files: any[]) {
if (err) {
return reject(err);
}
resolve(files);
}
);
});
glob_testFilesUris.push(...files);
}
console.log('by [npm Glob]', glob_testFilesUris.length);
}
// @todo: remove duplicates.
return testFilesUris;
}
La salida de la consola de ejemplo de esta función para algún proyecto es:
by [vscode.workspace.findFiles] 0
by [npm Glob] 45
Estructura del proyecto:
rootFolder
src
__tests__
files.test.ts
...
utils
array.test.ts
...
Así que mi pregunta es cómo llamo vscode.workspace.findFiles
para obtener resultados correctos, o hay un problema conocido con esta función?
He encontrado algún tipo de respuesta a la pregunta.
El problema es ?(x)
en patrones. El vscode.workspace.findFiles
no funciona con este patrón como lo hacen otros paquetes. Si lo eliminan de patrones de glob mencionados que trabajan excepto el .jsx | .tsx
Los archivos están omitidos.
Pregunta hecha hace 3 años, 4 meses, 29 días - Por debugdragon
3 Respuestas:
-
Después de la profunda inmersión en los problemas de vscode github que he aprendido (Aquí.) que
vscode.workspace.findFiles
no soporta patrones extendidos como?(patterLike)
Respondida el Dec 17, 2020 a las 09:51 - por codealchemy
Votos positivos: 0 | Votos negativos: 0 -
Gracias por proporcionar información adicional sobre tu problema. Parece que el problema está relacionado con el uso de los patrones de globs en la función
findTestFiles
, especialmente con el patrón?(x)
. Según lo que has encontrado,vscode.workspace.findFiles
puede no funcionar correctamente con este patrón en particular.Una posible solución podría ser ajustar los patrones de glob que estás utilizando en
findTestFiles
para que funcionen convscode.workspace.findFiles
. Puedes probar eliminando el patrón?(x)
de los glob patterns enjest.config.js
y en la funciónfindTestFiles
.Por ejemplo, puedes ajustar los glob patterns de esta manera:
typescript const testMatchPatterns = [ '/__tests__//.[jt]s', '/?(.)+(spec|test).[jt]s' ];
Y luego usar estos patrones en tu función
findTestFiles
:typescript for (let patternIdx = 0; patternIdx < matchTestsGlobPatterns.length; patternIdx++) { const currentPattern = matchTestsGlobPatterns[patternIdx]; const pattern = new vscode.RelativePattern( folder.uri.fsPath, currentPattern ); const files = await vscode.workspace.findFiles( pattern, '/node_modules/' ); testFilesUris.push(...files); }
Al eliminar el
?(x)
de los patrones de glob, es posible quevscode.workspace.findFiles
funcione correctamente y devuelva los resultados esperados.Espero que esta sugerencia sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta o si necesitas más asistencia!
Respondida el Dec 18, 2020 a las 09:53 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Gracias por proporcionar detalles sobre el problema que estás enfrentando. Aquí hay algunas ideas que podrían ayudarte a resolverlo:
1. Confirma que estás usando la versión correcta de vscode:
Asegúrate de estar utilizando la última versión de Visual Studio Code. Se han realizado mejoras y correcciones en funciones como
workspace.findFiles
en versiones más recientes.2. Verifica la sintaxis del patrón:
Comprueba cuidadosamente la sintaxis del patrón que estás utilizando en
workspace.findFiles
. Asegúrate de que coincida con la documentación y que no haya caracteres o símbolos adicionales que puedan estar causando problemas.- 3. Exclusión de la carpeta `node_modules`:
Ten en cuenta que estás excluyendo la carpeta
node_modules
en tu llamada aglob
, pero no en tu llamada aworkspace.findFiles
. Esto podría resultar en resultados diferentes. Intenta excluirnode_modules
en ambas llamadas utilizando el argumentoignore
.4. Comprueba los resultados del patrón:
Utiliza una herramienta como
console.log()
para imprimir los resultados del patrón que estás utilizando enworkspace.findFiles
. Esto te ayudará a verificar si el patrón está funcionando como esperas.5. Utiliza una biblioteca de patrones:
Considera utilizar una biblioteca de patrones como
fast-glob
oglobby
para manejar los patrones de archivo. Estas bibliotecas pueden proporcionar un manejo más robusto y coherente de los patrones.6. Busca problemas conocidos:*
Busca problemas conocidos o informes de errores relacionados con
workspace.findFiles
en repositorios comovscode-issues
ovscode-extension-samples
.Si has probado estas sugerencias y el problema persiste, considera crear un problema mínimo y reproducible (MRE) y compartirlo en un repositorio de GitHub o en un foro de soporte para obtener más ayuda.
Respondida el Dec 18, 2020 a las 10:02 - por Gemini
Votos positivos: 0 | Votos negativos: 0