New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
{@link https...} inside a @remarks causes error TS2304: Cannot find name 'https'
#49109
Comments
{@link https...} inside a @remark causes error TS2304: Cannot find name 'https'{@link https...} inside a @remarks causes error TS2304: Cannot find name 'https'
|
This is a tstl issue. |
|
Thanks for investigating @andrewbranch, I appreciate it. I thought the error was related to TypeScript because TSTL is producing correct LUA code, it's only the TypeScript compiler that complains. Can you provide more information on how you came to think that? What needs to change in TSTL to fix it? |
|
I’m not 100% sure how it’s happening, but I was unable to reproduce the problem with TypeScript alone (whether with |
|
This issue has been marked as 'External' and has seen no recent activity. It has been automatically closed for house-keeping purposes. |
|
@andrewbranch I have done some further investigation, this looks to me like we are using the TS API as intended, if not please correct me where we are going wrong: This diagnostic seems to happen when calling getJsDocTags() on the signature of the CallExpression Effectively what we are doing is (where callExpression is the code above): typeChecker.getResolvedSignature(callExpression).getJsDocTags()Full stacktrace of my little reproduction scenario is: Digging a little further with my debugger it seems that Node at index 0 seems fine, but the second node seems a bit suspicious. node.kind is 324, which is SyntaxKind.JSDocLink as expected, what is weird that node.name is an identifier 'https'. It then tries to resolve this symbol as if it was referring to a variable in code in using I'm not sure what expected behavior is here, or what we could do to prevent this. |
|
When I change interface LuaBootstrap {
/**
* remarks
*
* Link {@link https://github.com/microsoft/tsdoc}
*/
on_init(f: (() => void) ): void
}
const script : LuaBootstrap = {
on_init: (x) => x()
}
script.on_init(() => { })When I change Both examples have the same JSDocLink structure, with a The difference between the two is that the The error is specifically triggered by an What does
|
|
@Perryvw the thing that makes me most suspicious is that in the TSTL playground, the error appears on the method signature node itself rather than on the bit of the JSDoc that it tried to resolve and couldn’t. I can’t quite see what could cause that. I suspect you at least have an order of operations issue. The diagnostic is generated by a language service API call, which I think in an ideal world would not happen, but you can avoid that pitfall by only asking for diagnostics from a clean program; i.e. make sure you ask for diagnostics before running any other language service methods which could modify the checker state. |
|
@andrewbranch Interesting, I was not expecting this order of operations to matter but it seems that at least in our tstl tests we are calling I made the following change which seems to resolve the problem: public getLuaResult(): tstl.TranspileVirtualProjectResult {
const program = this.getProgram();
const collector = createEmitOutputCollector();
+
+ const preEmitDiagnostics = ts.getPreEmitDiagnostics(program);
+
const { diagnostics: transpileDiagnostics } = new tstl.Transpiler({ emitHost: this.getEmitHost() }).emit({
program,
customTransformers: this.customTransformers,
writeFile: collector.writeFile,
});
const diagnostics = ts.sortAndDeduplicateDiagnostics([
- ...ts.getPreEmitDiagnostics(program),
+ ...preEmitDiagnostics,
...transpileDiagnostics,
]);Seems like we are actually doing the same thing everywhere, so it might be an easy workaround for us to just swap some lines around. This does not strike me as intended/expected behavior from TypeScript side either, but at least we can work around it pretty easily for now. |
|
Yeah, double checked with the team and it’s definitely not supposed to happen, though I don’t find it too surprising. The call to Why this only happens when the |




Bug Report
@link@remarksI checked on 4.6.4, 4.6.2.
I tried checking on 4.7.0-rc1 but I got unrelated errors.
I don't understand how to use the 'Bug Workbench', it doesn't seem to pick up the config I enter.
https://www.typescriptlang.org/dev/bug-workbench/?target=99&allowSyntheticDefaultImports=true&explainFiles=true&forceConsistentCasingInFileNames=true&listEmittedFiles=true&listFiles=true&sourceMap=false&traceResolution=true&noImplicitOverride=true&noFallthroughCasesInSwitch=true&types=%5B%22typescript-to-lua%2Flanguage-extensions%22%2C%20%22lua-types%2F5.2%22%2C%20%22typed-factorio%2Fruntime%22%5D&lib=&ts=4.6.2#code/PTAEAEBcEMCcHMCmkBcpEGcB2iAekAoAkCAMwEsAbRLaAW0TQAdoBjAa2iQDoArDAPZYCAbwKhQAIloNJaSXQCeAWlJtIA2OQHK6AgCaSANOKkA3RLAzascqQAZuAVm73jpyUy1nokRHchYAFdEEwlJDFYtJkgMOzEJcIAjIKpDeVjISndEqX1EMztJTMpQZWUAd19WAAtJUwBfMKkaeHIcOLQExOkDf3kAPwBGABZuIYBOcfqJJo98swARRCYafKxWckx4ufD81ax1ze2u03DKIOhlSEVVzqkAPQAmcaHXHJ6bu6jyGOudC7QIpvMYjD7hL6IfSqdSabTA8bvZoQ26YH4xIpjABs3CeM1AuyklHIrBoGH6UgAqgA5AAyAEkAMIAUWpAGVmYsPp5EJZlgcjlt7iJCZIBDEbNBKPy1jRjsLRSlDtR9DLDnKhXYANoAXQIDSIxDA4Ao1BkjFAsVYQgo8D4giwoFEHgAJJEaog6ED5DVIJAmBgUCBYNAKtw2pAakEUuTYNasH4E9xrXRgAAVVFs9GQNMCWmXYBmSJ9a6oyLRSD-ZSA4BejB+WDAK028jwZTuz3Qe1CbkpphUSwAeQlQmFZykMAQyCKmBw+HBRPISW14-Cs7wkHxEh1yKken0QWoRRTeiw-AXCgMh8QACVMAILpAbEUsH0L5D7lrVxOy9mqzXKGgLB4EuJBlA3MkbDiXdzkuUs7mAFw8Rgn9VmhNRWA0LQBGAYIE3IWRxx3cdPAuNosE-b9ulycJzSKD8-xKZQmDI9ot0SA1cmI3JJClSgBAqNlFATD0n1YZY1EPSB6ToJhNFiAJglCEjMAAWSvah6QTSxxUUkJd0kPAWOgdoADEB3uQJ9JI0hNFJRlR3IesaEgRloGsYCtPM6hqXoE5LSUgziXrZk6HIP0oW8-yrOUnjgsgKLLMCkjXxkliSXCgBBLBFD02KelS2TiU2HMaicvKDMEII40QVToCYOw1EoclKsCElNzQGLWq0TDTKCDYnyEDM7gqkj6x6yBqUPShGQ9DgkusnjAjYW970fZ9OuSnjCvSkq70gaqKNG7aBDS4rwsHCxYC0fJjoKgRTL4yNYAEIJ4BqNzyQwLS2QqcLajyxpmmKetslOOLLjTOAkA6qQkPfUGADVLCSARyTu2iBAACUQaB8lgDGpB287IDZRBKFIQnJEBWklzS+SilgRAAEdUiZ-EDQNIgSBNAdzTQeNAgfbhYiIctfkgbghAAfXacKAAp5YASlAABeAA+UBqNAfj4HlgADfdQCc0A8fyfRLQES0PVADBoAsfWlf1J2gA
But when I set up those 3 files in a directory and run
npm installthennpm build, I get this errorHere's a reproduction inside the TSTL playground. You might have to edit the file to trigger it
https://typescripttolua.github.io/play/#code/PQKhCgAIUhRA7ALgJwJ6QA4HsCWTIBmWykyApgOY4DOiZyeFkZAbmfgBYCG8AJgDb1qAOkgBJRJBqQuAY1llq1HACNBkRB2RYArhQ4aOZSBX5YVXfpHMArMrMnwuAWzK9IAA2qyGGRB+EoCGhIAG8AAX48AGtIDkREDGoALmBgfh0uAFouDBxhAjlEYhwsYVksZ3SuOlpgABlMgCEsLERaZFzheOcrADUcMgB3SF4sWR1XJBrS+ABfIMhw+CwAZTJ+AiDgcDw6ZEKFSEauFraO3LCoSFBgyBDw8mcuZGjqa+gPmHqY6khZHiYXD4YoySAAVQASvVkmFIjE4gkkqlgFRNDoVOVKsBnDgfFhqFgCIhgO0xrIFvdoDt7lh4AB9PA4RAACgIsJZLIAlJAALwAPkgLFwvB5XNhwpwvHAC3AFXgtEg3l8klhJzO7RQl15Vyp1gZTMQHIAHjyBZBjdyZeBwMqcH5hHTGfBmZyzYLQhgGEgWQAiIhYX1cuZc8BAA
An MRE is below, but the error originates in the TSDoc of the Typed Factorio project, in
classes.d.ts.If I remove the
{@link ...}from the@remarks, then it works!The
@remarksand the{@link ...}was added last week:GlassBricks/typed-factorio@f18205f#diff-9e3b31eca93c33b0d77c73d8688a93f48e81e18d86efdc4c57ac1d5d76ce8845R229
If I revert Typed Factorio to v1.0.0, then again, there's no error.
Minimal, reproducible example
click to expand
./control.ts./package.json{ "name": "my-factorio-mod", "version": "0.5.0", "private": true, "scripts": { "build": "tstl", "dev": "tstl --watch" }, "engines": { "node": "~14.19.1" }, "devDependencies": {}, "dependencies": { "lua-types": "^2.11.0", "typescript-to-lua": "1.4.4", "typed-factorio": "1.1.0", "typescript": "4.6.2" }, "license": "UNLICENSED", "peerDependencies": {}, "optionalDependencies": {}, "bundledDependencies": [] }./tsconfig.json{ "$schema": "https://raw.githubusercontent.com/TypeScriptToLua/vscode-typescript-to-lua/master/tsconfig-schema.json", "compilerOptions": { "target": "esnext", "lib": [ "esnext" ], "module": "commonjs", "moduleResolution": "node", "types": [ "typescript-to-lua/language-extensions", "lua-types/5.2", "typed-factorio/runtime" ], "plugins": [ { "name": "typescript-tstl-plugin" } ], "allowSyntheticDefaultImports": true, "esModuleInterop": true, "explainFiles": true, "forceConsistentCasingInFileNames": true, "listEmittedFiles": true, "listFiles": true, "noImplicitAny": true, "noImplicitThis": true, "sourceMap": false, "strict": true, "strictFunctionTypes": true, "strictNullChecks": true, "traceResolution": true, "noImplicitReturns": true, "noImplicitOverride": true, "noFallthroughCasesInSwitch": true }, "tstl": { "luaTarget": "5.2", "tstlVerbose": true, "noHeader": true, "noImplicitSelf": true, "luaLibImport": "require" } }TSDoc with a
{@link https:...}inside of a@remarkblock causes an errorTSDoc with a
{@link https:...}inside of a@remarkblock does not cause an errorWorkaround
A workaround is to add
"skipLibCheck": truetotsconfig.json> compilerOptions.See also
The text was updated successfully, but these errors were encountered: