Skip to content

Commit 65562cb

Browse files
committed
Simplift isValidLuaIdentifier usage
1 parent 85df23f commit 65562cb

4 files changed

Lines changed: 17 additions & 36 deletions

File tree

src/LuaPrinter.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as ts from "typescript";
44
import { CompilerOptions, LuaLibImportKind } from "./CompilerOptions";
55
import * as lua from "./LuaAST";
66
import { loadLuaLibFeatures, LuaLibFeature } from "./LuaLib";
7-
import { isValidLuaIdentifier, luaKeywords } from "./transformation/utils/safe-names";
7+
import { isValidLuaIdentifier } from "./transformation/utils/safe-names";
88
import { EmitHost } from "./transpilation";
99
import { trimExtension } from "./utils";
1010

@@ -660,11 +660,7 @@ export class LuaPrinter {
660660
const value = this.printExpression(expression.value);
661661

662662
if (expression.key) {
663-
if (
664-
lua.isStringLiteral(expression.key) &&
665-
isValidLuaIdentifier(expression.key.value) &&
666-
!luaKeywords.has(expression.key.value)
667-
) {
663+
if (lua.isStringLiteral(expression.key) && isValidLuaIdentifier(expression.key.value)) {
668664
chunks.push(expression.key.value, " = ", value);
669665
} else {
670666
chunks.push("[", this.printExpression(expression.key), "] = ", value);
@@ -764,11 +760,7 @@ export class LuaPrinter {
764760
const chunks: SourceChunk[] = [];
765761

766762
chunks.push(this.printExpression(expression.table));
767-
if (
768-
lua.isStringLiteral(expression.index) &&
769-
isValidLuaIdentifier(expression.index.value) &&
770-
!luaKeywords.has(expression.index.value)
771-
) {
763+
if (lua.isStringLiteral(expression.index) && isValidLuaIdentifier(expression.index.value)) {
772764
chunks.push(".", this.createSourceNode(expression.index, expression.index.value));
773765
} else {
774766
chunks.push("[", this.printExpression(expression.index), "]");

src/transformation/utils/safe-names.ts

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { InvalidAmbientIdentifierName } from "./errors";
44
import { isAmbientNode } from "./typescript";
55
import { isSymbolExported } from "./export";
66

7+
export const isValidLuaIdentifier = (name: string) => !luaKeywords.has(name) && /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name);
78
export const luaKeywords: ReadonlySet<string> = new Set([
89
"and",
910
"break",
@@ -28,7 +29,7 @@ export const luaKeywords: ReadonlySet<string> = new Set([
2829
"while",
2930
]);
3031

31-
export const luaBuiltins: ReadonlySet<string> = new Set([
32+
const luaBuiltins: ReadonlySet<string> = new Set([
3233
"_G",
3334
"assert",
3435
"coroutine",
@@ -51,38 +52,31 @@ export const luaBuiltins: ReadonlySet<string> = new Set([
5152
"unpack",
5253
]);
5354

54-
export const isValidLuaIdentifier = (str: string) => /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(str);
55-
56-
export const isUnsafeName = (name: string) =>
57-
luaKeywords.has(name) || luaBuiltins.has(name) || !isValidLuaIdentifier(name);
55+
export const isUnsafeName = (name: string) => !isValidLuaIdentifier(name) || luaBuiltins.has(name);
5856

5957
export function hasUnsafeSymbolName(
6058
context: TransformationContext,
6159
symbol: ts.Symbol,
6260
tsOriginal: ts.Identifier
6361
): boolean {
64-
const isLuaKeyword = luaKeywords.has(symbol.name);
65-
const isInvalidIdentifier = !isValidLuaIdentifier(symbol.name);
6662
const isAmbient = symbol.declarations && symbol.declarations.some(d => isAmbientNode(d));
67-
if ((isLuaKeyword || isInvalidIdentifier) && isAmbient) {
63+
64+
if (!isValidLuaIdentifier(symbol.name) && isAmbient) {
6865
// Catch ambient declarations of identifiers with bad names
6966
throw InvalidAmbientIdentifierName(tsOriginal);
7067
}
7168

72-
if (isUnsafeName(symbol.name)) {
73-
// only unsafe when non-ambient and not exported
74-
return !isAmbient && !isSymbolExported(context, symbol);
75-
}
76-
77-
return false;
69+
// only unsafe when non-ambient and not exported
70+
return isUnsafeName(symbol.name) && !isAmbient && !isSymbolExported(context, symbol);
7871
}
7972

8073
export function hasUnsafeIdentifierName(context: TransformationContext, identifier: ts.Identifier): boolean {
8174
const symbol = context.checker.getSymbolAtLocation(identifier);
82-
83-
if (symbol !== undefined) {
75+
if (symbol) {
8476
return hasUnsafeSymbolName(context, symbol, identifier);
85-
} else if (luaKeywords.has(identifier.text) || !isValidLuaIdentifier(identifier.text)) {
77+
}
78+
79+
if (!isValidLuaIdentifier(identifier.text)) {
8680
throw InvalidAmbientIdentifierName(identifier);
8781
}
8882

src/transformation/visitors/call.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { validateAssignment } from "../utils/assignment-validation";
77
import { ContextType, getDeclarationContextType } from "../utils/function-context";
88
import { createImmediatelyInvokedFunctionExpression, createUnpackCall, wrapInTable } from "../utils/lua-ast";
99
import { LuaLibFeature, transformLuaLibFunction } from "../utils/lualib";
10-
import { isValidLuaIdentifier, luaKeywords } from "../utils/safe-names";
10+
import { isValidLuaIdentifier } from "../utils/safe-names";
1111
import { isArrayType, isExpressionWithEvaluationEffect, isInDestructingAssignment } from "../utils/typescript";
1212
import { transformElementAccessArgument } from "./access";
1313
import { transformIdentifier } from "./identifier";
@@ -46,11 +46,7 @@ export function transformContextualCallExpression(
4646
transformedArguments: lua.Expression[]
4747
): lua.Expression {
4848
const left = ts.isCallExpression(node) ? node.expression : node.tag;
49-
if (
50-
ts.isPropertyAccessExpression(left) &&
51-
!luaKeywords.has(left.name.text) &&
52-
isValidLuaIdentifier(left.name.text)
53-
) {
49+
if (ts.isPropertyAccessExpression(left) && isValidLuaIdentifier(left.name.text)) {
5450
// table:name()
5551
let table = context.transformExpression(left.expression);
5652
if (lua.isTableExpression(table)) {

src/transformation/visitors/literal.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import {
1111
hasUnsafeIdentifierName,
1212
hasUnsafeSymbolName,
1313
isValidLuaIdentifier,
14-
luaKeywords,
1514
} from "../utils/safe-names";
1615
import { getSymbolIdOfSymbol, trackSymbolReference } from "../utils/symbols";
1716
import { isArrayType } from "../utils/typescript";
@@ -40,7 +39,7 @@ export function createShorthandIdentifier(
4039
: valueSymbol.name;
4140
} else {
4241
const propertyName = propertyIdentifier.text;
43-
if (luaKeywords.has(propertyName) || !isValidLuaIdentifier(propertyName)) {
42+
if (!isValidLuaIdentifier(propertyName)) {
4443
// Catch ambient declarations of identifiers with bad names
4544
throw InvalidAmbientIdentifierName(propertyIdentifier);
4645
}

0 commit comments

Comments
 (0)