noImplicitGlobalVariables compiler option (#1269) · TypeScriptToLua/TypeScriptToLua@43d31d0 · GitHub
Skip to content

Commit 43d31d0

Browse files
authored
noImplicitGlobalVariables compiler option (#1269)
* adding option + test * adding noImplicitGlobalVariables option * Update noImplicitGlobalVariables.spec.ts * prettier fix * fix tests
1 parent 5756807 commit 43d31d0

4 files changed

Lines changed: 40 additions & 1 deletion

File tree

‎src/CompilerOptions.ts‎

Lines changed: 1 addition & 0 deletions

‎src/cli/parse.ts‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ export const optionDeclarations: CommandLineOption[] = [
5858
type: "enum",
5959
choices: Object.values(LuaTarget),
6060
},
61+
{
62+
name: "noImplicitGlobalVariables",
63+
description:
64+
'Specify to prevent implicitly turning "normal" variants into global variables in the transpiled output.',
65+
type: "boolean",
66+
},
6167
{
6268
name: "noImplicitSelf",
6369
description: 'If "this" is implicitly considered an any type, do not generate a self parameter.',

‎src/transformation/utils/lua-ast.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ export function createLocalOrExportedOrGlobalDeclaration(
137137
let declaration: lua.VariableDeclarationStatement | undefined;
138138
let assignment: lua.AssignmentStatement | undefined;
139139

140+
const noImplicitGlobalVariables = context.options.noImplicitGlobalVariables === true;
141+
140142
const isFunctionDeclaration = tsOriginal !== undefined && ts.isFunctionDeclaration(tsOriginal);
141143

142144
const identifiers = castArray(lhs);
@@ -160,7 +162,7 @@ export function createLocalOrExportedOrGlobalDeclaration(
160162
const scope = peekScope(context);
161163
const isTopLevelVariable = scope.type === ScopeType.File;
162164

163-
if (context.isModule || !isTopLevelVariable) {
165+
if (context.isModule || !isTopLevelVariable || noImplicitGlobalVariables) {
164166
const isLuaFunctionExpression = rhs && !Array.isArray(rhs) && lua.isFunctionExpression(rhs);
165167
const isSafeRecursiveFunctionDeclaration = isFunctionDeclaration && isLuaFunctionExpression;
166168
if (!isSafeRecursiveFunctionDeclaration && hasMultipleReferences(scope, lhs)) {
Lines changed: 30 additions & 0 deletions

0 commit comments

Comments
 (0)