0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

Improved typechecking error for unstable props (#5503)

This commit is contained in:
Luca Casonato 2020-05-29 12:45:20 +02:00 committed by GitHub
parent 2668637e9b
commit 02a6720527
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 78 additions and 4 deletions

View file

@ -10,6 +10,79 @@ import {
DiagnosticItem,
} from "./diagnostics.ts";
const unstableDenoGlobalProperties = [
"umask",
"linkSync",
"link",
"symlinkSync",
"symlink",
"DirKind",
"dir",
"loadavg",
"osRelease",
"openPlugin",
"DiagnosticCategory",
"DiagnosticMessageChain",
"DiagnosticItem",
"Diagnostic",
"formatDiagnostics",
"CompilerOptions",
"TranspileOnlyResult",
"transpileOnly",
"compile",
"bundle",
"Location",
"applySourceMap",
"LinuxSignal",
"MacOSSignal",
"Signal",
"SignalStream",
"signal",
"signals",
"setRaw",
"utimeSync",
"utime",
"ShutdownMode",
"shutdown",
"DatagramConn",
"UnixListenOptions",
"listen",
"listenDatagram",
"UnixConnectOptions",
"connect",
"StartTlsOptions",
"startTls",
"kill",
"PermissionName",
"PermissionState",
"RunPermissionDescriptor",
"ReadPermissionDescriptor",
"WritePermissionDescriptor",
"NetPermissionDescriptor",
"EnvPermissionDescriptor",
"PluginPermissionDescriptor",
"HrtimePermissionDescriptor",
"PermissionDescriptor",
"Permissions",
"PermissionStatus",
"hostname",
];
function transformMessageText(messageText: string, code: number): string {
if (code === 2339) {
const property = messageText
.replace(/^Property '/, "")
.replace(/' does not exist on type 'typeof Deno'\.$/, "");
if (
messageText.endsWith("on type 'typeof Deno'.") &&
unstableDenoGlobalProperties.includes(property)
) {
return `${messageText} 'Deno.${property}' is an unstable API. Did you forget to run with the '--unstable' flag?`;
}
}
return messageText;
}
interface SourceInformation {
sourceLine: string;
lineNumber: number;
@ -78,7 +151,8 @@ function fromDiagnosticMessageChain(
return undefined;
}
return messageChain.map(({ messageText: message, code, category, next }) => {
return messageChain.map(({ messageText, code, category, next }) => {
const message = transformMessageText(messageText, code);
return {
message,
code,
@ -110,9 +184,9 @@ function parseDiagnostic(
let message: string;
let messageChain: DiagnosticMessageChain | undefined;
if (typeof messageText === "string") {
message = messageText;
message = transformMessageText(messageText, code);
} else {
message = messageText.messageText;
message = transformMessageText(messageText.messageText, messageText.code);
messageChain = fromDiagnosticMessageChain([messageText])![0];
}

View file

@ -1,5 +1,5 @@
[WILDCARD]
error: TS2339 [ERROR]: Property 'loadavg' does not exist on type 'typeof Deno'.
error: TS2339 [ERROR]: Property 'loadavg' does not exist on type 'typeof Deno'. 'Deno.loadavg' is an unstable API. Did you forget to run with the '--unstable' flag?
console.log(Deno.loadavg);
~~~~~~~
at [WILDCARD]/cli/tests/unstable.ts:1:18