Skip to content

Commit 6926c07

Browse files
authored
Made lualibimportkind and luatarget options case insensitive (#366)
1 parent 157b442 commit 6926c07

File tree

8 files changed

+76
-24
lines changed

8 files changed

+76
-24
lines changed

src/CompilerOptions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import * as ts from "typescript";
22

33
export interface CompilerOptions extends ts.CompilerOptions {
44
noHeader?: boolean;
5-
luaTarget?: string;
6-
luaLibImport?: string;
5+
luaTarget?: LuaTarget;
6+
luaLibImport?: LuaLibImportKind;
77
}
88

99
export enum LuaLibImportKind {

src/LuaTransformer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ export class LuaTransformer {
4646

4747
private readonly typeValidationCache: Map<ts.Type, Set<ts.Type>> = new Map<ts.Type, Set<ts.Type>>();
4848

49-
public constructor(program: ts.Program) {
49+
public constructor(program: ts.Program, options: CompilerOptions) {
5050
this.checker = program.getTypeChecker();
51-
this.options = program.getCompilerOptions();
51+
this.options = options;
5252
this.isStrict = this.options.alwaysStrict || (this.options.strict && this.options.alwaysStrict !== false) ||
5353
(this.isModule && this.options.target && this.options.target >= ts.ScriptTarget.ES2015);
5454

src/LuaTranspiler.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as ts from "typescript";
44

55
import * as tstl from "./LuaAST";
66

7-
import {CompilerOptions, LuaLibImportKind} from "./CompilerOptions";
7+
import {CompilerOptions, LuaLibImportKind, LuaTarget} from "./CompilerOptions";
88
import {LuaPrinter} from "./LuaPrinter";
99
import {LuaTransformer} from "./LuaTransformer";
1010

@@ -19,11 +19,25 @@ export class LuaTranspiler {
1919

2020
constructor(program: ts.Program) {
2121
this.program = program;
22-
this.options = this.program.getCompilerOptions() as CompilerOptions;
23-
this.luaTransformer = new LuaTransformer(this.program);
22+
this.options = this.getOptions(program);
23+
this.luaTransformer = new LuaTransformer(this.program, this.options);
2424
this.luaPrinter = new LuaPrinter(this.options);
2525
}
2626

27+
private getOptions(program: ts.Program): CompilerOptions {
28+
const options = program.getCompilerOptions() as CompilerOptions;
29+
30+
// Make options case-insenstive
31+
if (options.luaTarget) {
32+
options.luaTarget = options.luaTarget.toLowerCase() as LuaTarget;
33+
}
34+
if (options.luaLibImport) {
35+
options.luaLibImport = options.luaLibImport.toLocaleLowerCase() as LuaLibImportKind;
36+
}
37+
38+
return options;
39+
}
40+
2741
private reportErrors(): number {
2842
// Get all diagnostics, ignore unsupported extension
2943
const diagnostics = ts.getPreEmitDiagnostics(this.program).filter(diag => diag.code !== 6054);

test/src/util.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ export function expectCodeEqual(code1: string, code2: string): void {
7676

7777
// Get a mock transformer to use for testing
7878
export function makeTestTransformer(target: LuaTarget = LuaTarget.Lua53): LuaTransformer {
79-
return new LuaTransformer(ts.createProgram([], {luaTarget: target}));
79+
const options = {luaTarget: target};
80+
return new LuaTransformer(ts.createProgram([], options), options);
8081
}
8182

8283
export function transpileAndExecute(

test/unit/assignmentDestructuring.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Expect, Test, TestCase } from "alsatian";
2-
import { LuaTarget } from "../../src/CompilerOptions";
2+
import { LuaTarget, LuaLibImportKind } from "../../src/CompilerOptions";
33
import * as util from "../src/util";
44

55
export class AssignmentDestructuringTests {
@@ -12,7 +12,7 @@ export class AssignmentDestructuringTests {
1212
public assignmentDestructuring51(): void {
1313
// Transpile
1414
const lua = util.transpileString(
15-
this.assignmentDestruturingTs, {luaTarget: LuaTarget.Lua51, luaLibImport: "none"}
15+
this.assignmentDestruturingTs, {luaTarget: LuaTarget.Lua51, luaLibImport: LuaLibImportKind.None}
1616
);
1717
// Assert
1818
Expect(lua).toBe(`local a, b = unpack(myFunc());`);
@@ -22,7 +22,7 @@ export class AssignmentDestructuringTests {
2222
public tupleDestructing52(): void {
2323
// Transpile
2424
const lua = util.transpileString(
25-
this.assignmentDestruturingTs, {luaTarget: LuaTarget.Lua52, luaLibImport: "none"}
25+
this.assignmentDestruturingTs, {luaTarget: LuaTarget.Lua52, luaLibImport: LuaLibImportKind.None}
2626
);
2727
// Assert
2828
Expect(lua).toBe(`local a, b = table.unpack(myFunc());`);
@@ -32,7 +32,7 @@ export class AssignmentDestructuringTests {
3232
public assignmentDestructuringJIT(): void {
3333
// Transpile
3434
const lua = util.transpileString(
35-
this.assignmentDestruturingTs, {luaTarget: LuaTarget.LuaJIT, luaLibImport: "none"}
35+
this.assignmentDestruturingTs, {luaTarget: LuaTarget.LuaJIT, luaLibImport: LuaLibImportKind.None}
3636
);
3737
// Assert
3838
Expect(lua).toBe(`local a, b = unpack(myFunc());`);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Expect, Test, TestCase } from "alsatian";
2+
3+
import * as util from "../../../src/util";
4+
import { LuaTarget, LuaLibImportKind } from "../../../../src/CompilerOptions";
5+
6+
export class ObjectLiteralTests
7+
{
8+
@TestCase(LuaTarget.LuaJIT)
9+
@TestCase("jit")
10+
@TestCase("JiT")
11+
@Test("Options LuaTarget case-insensitive")
12+
public luaTargetCaseInsensitive(target: string): void {
13+
const options = {LuaTarget: target};
14+
const result = util.transpileString("~a", options);
15+
16+
Expect(result).toBe("bit.bnot(a);");
17+
}
18+
19+
@TestCase(LuaLibImportKind.None)
20+
@TestCase("none")
21+
@TestCase("NoNe")
22+
@Test("Options LuaLibImport case-insensitive")
23+
public luaLibImportCaseInsensitive(importKind: string): void {
24+
const options = {LuaLibImportKind: importKind};
25+
const result = util.transpileString("const a = new Map<string, string>();", options);
26+
27+
Expect(result).toBe("local a = Map.new(true);");
28+
}
29+
}

test/unit/expressions.spec.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Expect, Test, TestCase } from "alsatian";
22
import { TranspileError } from "../../src/TranspileError";
3-
import { LuaTarget } from "../../src/CompilerOptions";
3+
import { LuaTarget, LuaLibImportKind } from "../../src/CompilerOptions";
44

55
import * as ts from "typescript";
66
import * as util from "../src/util";
@@ -100,7 +100,7 @@ export class ExpressionTests {
100100
@Test("Bitop [5.1]")
101101
public bitOperatorOverride51(input: string, lua: string): void {
102102
// Bit operations not supported in 5.1, expect an exception
103-
Expect(() => util.transpileString(input, { luaTarget: LuaTarget.Lua51, luaLibImport: "none" }))
103+
Expect(() => util.transpileString(input, { luaTarget: LuaTarget.Lua51, luaLibImport: LuaLibImportKind.None }))
104104
.toThrow();
105105
}
106106

@@ -119,7 +119,8 @@ export class ExpressionTests {
119119
@TestCase("a>>>=b", "a = bit.arshift(a, b);")
120120
@Test("Bitop [JIT]")
121121
public bitOperatorOverrideJIT(input: string, lua: string): void {
122-
Expect(util.transpileString(input, { luaTarget: LuaTarget.LuaJIT, luaLibImport: "none" })).toBe(lua);
122+
const options = { luaTarget: LuaTarget.LuaJIT, luaLibImport: LuaLibImportKind.None };
123+
Expect(util.transpileString(input, options)).toBe(lua);
123124
}
124125

125126
@TestCase("~a", "bit32.bnot(a);")
@@ -137,7 +138,8 @@ export class ExpressionTests {
137138
@TestCase("a>>>=b", "a = bit32.arshift(a, b);")
138139
@Test("Bitop [5.2]")
139140
public bitOperatorOverride52(input: string, lua: string): void {
140-
Expect(util.transpileString(input, { luaTarget: LuaTarget.Lua52, luaLibImport: "none" })).toBe(lua);
141+
const options = { luaTarget: LuaTarget.Lua52, luaLibImport: LuaLibImportKind.None };
142+
Expect(util.transpileString(input, options)).toBe(lua);
141143
}
142144

143145
@TestCase("~a", "~a;")
@@ -153,14 +155,15 @@ export class ExpressionTests {
153155
@TestCase("a>>=b", "a = a >> b;")
154156
@Test("Bitop [5.3]")
155157
public bitOperatorOverride53(input: string, lua: string): void {
156-
Expect(util.transpileString(input, { luaTarget: LuaTarget.Lua53, luaLibImport: "none" })).toBe(lua);
158+
const options = { luaTarget: LuaTarget.Lua53, luaLibImport: LuaLibImportKind.None };
159+
Expect(util.transpileString(input, options)).toBe(lua);
157160
}
158161

159162
@TestCase("a>>>b")
160163
@TestCase("a>>>=b")
161164
@Test("Unsupported bitop 5.3")
162165
public bitOperatorOverride53Unsupported(input: string): void {
163-
Expect(() => util.transpileString(input, { luaTarget: LuaTarget.Lua53, luaLibImport: "none" }))
166+
Expect(() => util.transpileString(input, { luaTarget: LuaTarget.Lua53, luaLibImport: LuaLibImportKind.None }))
164167
.toThrowError(TranspileError, "Bitwise >>> operator is/are not supported for target Lua 5.3.");
165168
}
166169

test/unit/spreadElement.spec.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Expect, Test, TestCase } from "alsatian";
22

3-
import { LuaTarget } from "../../src/CompilerOptions";
3+
import { LuaTarget, LuaLibImportKind } from "../../src/CompilerOptions";
44
import * as util from "../src/util";
55

66
export class SpreadElementTest {
@@ -26,19 +26,24 @@ export class SpreadElementTest {
2626
@Test("Spread Element Lua 5.2")
2727
public spreadElement52(): void
2828
{
29-
const lua = util.transpileString(`[...[0, 1, 2]]`, {luaTarget: LuaTarget.Lua52, luaLibImport: "none"});
29+
const options = {luaTarget: LuaTarget.Lua52, luaLibImport: LuaLibImportKind.None};
30+
const lua = util.transpileString(`[...[0, 1, 2]]`, options);
3031
Expect(lua).toBe("{table.unpack({0, 1, 2})};");
3132
}
32-
@Test("Spread Element Lua 5.3")
33+
34+
@Test("Spread Element Lua 5.3")
3335
public spreadElement53(): void
3436
{
35-
const lua = util.transpileString(`[...[0, 1, 2]]`, {luaTarget: LuaTarget.Lua53, luaLibImport: "none"});
37+
const options = {luaTarget: LuaTarget.Lua53, luaLibImport: LuaLibImportKind.None};
38+
const lua = util.transpileString(`[...[0, 1, 2]]`, options);
3639
Expect(lua).toBe("{table.unpack({0, 1, 2})};");
3740
}
38-
@Test("Spread Element Lua JIT")
41+
42+
@Test("Spread Element Lua JIT")
3943
public spreadElementJIT(): void
4044
{
41-
const lua = util.transpileString(`[...[0, 1, 2]]`, {luaTarget: LuaTarget.LuaJIT, luaLibImport: "none"});
45+
const options = {luaTarget: "JiT" as LuaTarget, luaLibImport: LuaLibImportKind.None};
46+
const lua = util.transpileString(`[...[0, 1, 2]]`, options);
4247
Expect(lua).toBe("{unpack({0, 1, 2})};");
4348
}
4449
}

0 commit comments

Comments
 (0)