From e2544bab62fe7756f2ec269c5ca935aa45c99932 Mon Sep 17 00:00:00 2001 From: Perryvw Date: Thu, 1 Sep 2022 22:27:56 +0200 Subject: [PATCH 1/2] Fixed missed require patterns for module resolution --- src/transpilation/resolve.ts | 4 ++-- test/unit/modules/resolution.spec.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/transpilation/resolve.ts b/src/transpilation/resolve.ts index f0037c249..e1dff91f5 100644 --- a/src/transpilation/resolve.ts +++ b/src/transpilation/resolve.ts @@ -304,7 +304,7 @@ function isBuildModeLibrary(program: ts.Program) { function findRequiredPaths(code: string): string[] { // Find all require("") paths in a lua code string const paths: string[] = []; - const pattern = /(^|\s|;|=|\()require\("(.+?)"\)/g; + const pattern = /(^|\s|;|=|\()require\s*\(?["|'](.+?)["|']\)?/g; // eslint-disable-next-line @typescript-eslint/ban-types let match: RegExpExecArray | null; while ((match = pattern.exec(code))) { @@ -321,7 +321,7 @@ function replaceRequireInCode(file: ProcessedFile, originalRequire: string, newR const escapedRequire = originalRequire.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); file.code = file.code.replace( - new RegExp(`(^|\\s|;|=|\\()require\\("${escapedRequire}"\\)`), + new RegExp(`(^|\\s|;|=|\\()require\\s*\\(?["|']${escapedRequire}["|']\\)?`), `$1require("${requirePath}")` ); } diff --git a/test/unit/modules/resolution.spec.ts b/test/unit/modules/resolution.spec.ts index b2c7194b5..a8342b213 100644 --- a/test/unit/modules/resolution.spec.ts +++ b/test/unit/modules/resolution.spec.ts @@ -87,6 +87,33 @@ test("doesn't resolve paths out of root dir", () => { .expectDiagnosticsToMatchSnapshot([couldNotResolveRequire.code]); }); +test("resolves non-standard requires", () => { + const { transpiledFiles } = util.testModule` + export * from "./externalLua"; + ` + .addExtraFile("externalLua.d.ts", "export const foo = 3;") + .addExtraFile( + "externalLua.lua", + ` + require("requiredLuaFile1") -- standard + require('requiredLuaFile2') -- single quote + require'requiredLuaFile3' -- no parentheses + require"requiredLuaFile4" -- no parentheses double quote + require "requiredLuaFile5" -- no parentheses and space + ` + ) + .addExtraFile("requiredLuaFile1.lua", "") + .addExtraFile("requiredLuaFile2.lua", "") + .addExtraFile("requiredLuaFile3.lua", "") + .addExtraFile("requiredLuaFile4.lua", "") + .addExtraFile("requiredLuaFile5.lua", "") + .expectToHaveNoDiagnostics() + .getLuaResult(); + + // Expect main.lua, externalLua.lua and all 5 required lua files in there + expect(transpiledFiles.map(f => f.outPath)).toHaveLength(7); +}); + test.each([ { declarationStatement: ` From 2cfe1f86b587418c7d54b46c06996c54ffa3c464 Mon Sep 17 00:00:00 2001 From: Perryvw Date: Sun, 4 Sep 2022 17:45:00 +0200 Subject: [PATCH 2/2] fix bug with mixed quotes --- src/transpilation/resolve.ts | 4 ++-- test/unit/modules/resolution.spec.ts | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/transpilation/resolve.ts b/src/transpilation/resolve.ts index e1dff91f5..f8458fa49 100644 --- a/src/transpilation/resolve.ts +++ b/src/transpilation/resolve.ts @@ -304,11 +304,11 @@ function isBuildModeLibrary(program: ts.Program) { function findRequiredPaths(code: string): string[] { // Find all require("") paths in a lua code string const paths: string[] = []; - const pattern = /(^|\s|;|=|\()require\s*\(?["|'](.+?)["|']\)?/g; + const pattern = /(^|\s|;|=|\()require\s*\(?(["|'])(.+?)\2\)?/g; // eslint-disable-next-line @typescript-eslint/ban-types let match: RegExpExecArray | null; while ((match = pattern.exec(code))) { - paths.push(match[2]); + paths.push(match[3]); } return paths; diff --git a/test/unit/modules/resolution.spec.ts b/test/unit/modules/resolution.spec.ts index a8342b213..26c147c68 100644 --- a/test/unit/modules/resolution.spec.ts +++ b/test/unit/modules/resolution.spec.ts @@ -100,6 +100,8 @@ test("resolves non-standard requires", () => { require'requiredLuaFile3' -- no parentheses require"requiredLuaFile4" -- no parentheses double quote require "requiredLuaFile5" -- no parentheses and space + require "requiredLua'File6" -- no parentheses and space + require 'requiredLua"File7' -- no parentheses and space ` ) .addExtraFile("requiredLuaFile1.lua", "") @@ -107,11 +109,13 @@ test("resolves non-standard requires", () => { .addExtraFile("requiredLuaFile3.lua", "") .addExtraFile("requiredLuaFile4.lua", "") .addExtraFile("requiredLuaFile5.lua", "") + .addExtraFile("requiredLua'File6.lua", "") + .addExtraFile('requiredLua"File7.lua', "") .expectToHaveNoDiagnostics() .getLuaResult(); - // Expect main.lua, externalLua.lua and all 5 required lua files in there - expect(transpiledFiles.map(f => f.outPath)).toHaveLength(7); + // Expect main.lua, externalLua.lua and all 7 required lua files in there + expect(transpiledFiles.map(f => f.outPath)).toHaveLength(9); }); test.each([