92 lines
1.4 KiB
JavaScript
92 lines
1.4 KiB
JavaScript
// https://262.ecma-international.org/14.0/#sec-keywords-and-reserved-words
|
|
// 14 is ES2023
|
|
const identifiers = [
|
|
// Keywords
|
|
'await',
|
|
'break',
|
|
'case',
|
|
'catch',
|
|
'class',
|
|
'const',
|
|
'continue',
|
|
'debugger',
|
|
'default',
|
|
'delete',
|
|
'do',
|
|
'else',
|
|
'enum',
|
|
'export',
|
|
'extends',
|
|
'false',
|
|
'finally',
|
|
'for',
|
|
'function',
|
|
'if',
|
|
'import',
|
|
'in',
|
|
'instanceof',
|
|
'new',
|
|
'null',
|
|
'return',
|
|
'super',
|
|
'switch',
|
|
'this',
|
|
'throw',
|
|
'true',
|
|
'try',
|
|
'typeof',
|
|
'var',
|
|
'void',
|
|
'while',
|
|
'with',
|
|
'yield',
|
|
|
|
// Future reserved keywords (strict mode)
|
|
'implements',
|
|
'interface',
|
|
'let',
|
|
'package',
|
|
'private',
|
|
'protected',
|
|
'public',
|
|
'static',
|
|
|
|
// Not keywords, but still restricted
|
|
'arguments',
|
|
'eval',
|
|
];
|
|
|
|
// https://262.ecma-international.org/14.0/#sec-value-properties-of-the-global-object
|
|
const globalProperties = [
|
|
'globalThis',
|
|
'Infinity',
|
|
'NaN',
|
|
'undefined',
|
|
];
|
|
|
|
// These are TypeScript's built-in types that are reserved and cannot be used for type names
|
|
const typeScriptTypes = [
|
|
'any',
|
|
'bigint',
|
|
'boolean',
|
|
'never',
|
|
'null',
|
|
'number',
|
|
'object',
|
|
'string',
|
|
'symbol',
|
|
'undefined',
|
|
'unknown',
|
|
'void',
|
|
];
|
|
|
|
export default function reservedIdentifiers({includeGlobalProperties = false} = {}) {
|
|
return new Set([
|
|
...identifiers,
|
|
...(includeGlobalProperties ? globalProperties : []),
|
|
]);
|
|
}
|
|
|
|
export function typeScriptReservedTypes() {
|
|
return new Set(typeScriptTypes);
|
|
}
|