-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
Line number selection doesn't use the @ava/typescript provider to resolve the compiled JS file. This means it's parsing the actual TypeScript file which is not supported:
Lines 42 to 51 in ac0d75d
| let checkSelectedByLineNumbers; | |
| try { | |
| checkSelectedByLineNumbers = lineNumberSelection({ | |
| file: options.file, | |
| lineNumbers: options.lineNumbers, | |
| }); | |
| } catch (error) { | |
| channel.send({type: 'line-number-selection-error', err: serializeError('Line number selection error', false, error, options.file)}); | |
| checkSelectedByLineNumbers = () => false; | |
| } |
We'd need to amend the worker interface to make the file resolver available:
https://github.com/avajs/typescript/blob/34da7bf008bd94e4844562ed86f5446faae6c087/index.js#L152-L168
This requires a new protocol identifier, and the file resolver should only be called if available to retain compatibility with the current @ava/typescript version. I can explain more when we get to this point:
Lines 12 to 14 in ac0d75d
| const levelsByProtocol = { | |
| 'ava-3.2': levels.levelIntegersAreCurrentlyUnused, | |
| }; |
We can then install the providers earlier:
Lines 123 to 132 in ac0d75d
| // Install before processing options.require, so if helpers are added to the | |
| // require configuration the *compiled* helper will be loaded. | |
| const {projectDir, providerStates = []} = options; | |
| const providers = []; | |
| await Promise.all(providerStates.map(async ({type, state}) => { | |
| if (type === 'typescript') { | |
| const provider = await providerManager.typescript(projectDir); | |
| providers.push(provider.worker({extensionsToLoadAsModules, state})); | |
| } | |
| })); |