summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorAndrii Nugged <nugged@gmail.com>2024-03-22 05:05:58 +0200
committerAndrii Nugged <nugged@gmail.com>2024-03-22 05:07:16 +0200
commit9637df5a2d8a8d4d64912ee79d695340cee3def2 (patch)
tree16ec8ab69464704f08594b7df1a3927eb178cda7 /server
parent1f3e38e74277f1f95b6a4a10012a71eb9826b109 (diff)
downloadPerlNavigator-9637df5a2d8a8d4d64912ee79d695340cee3def2.zip
Add support for custom Perl environment variables
Introduced two new environment variables: perlEnv and perlEnvAdd. - perlEnv: Hash. Pass environment variables to the perl executable. Skipped if undefined. - perlEnvAdd: Boolean. Add environment variables to current environment, or totally replace (perlEnv related). Default is true.
Diffstat (limited to 'server')
-rw-r--r--server/src/diagnostics.ts24
-rw-r--r--server/src/server.ts2
-rw-r--r--server/src/types.ts2
3 files changed, 23 insertions, 5 deletions
diff --git a/server/src/diagnostics.ts b/server/src/diagnostics.ts
index 64eec17..94618b9 100644
--- a/server/src/diagnostics.ts
+++ b/server/src/diagnostics.ts
@@ -19,6 +19,8 @@ export async function perlcompile(textDocument: TextDocument, workspaceFolders:
return { diags: [], perlDoc: parsedDoc };
}
let perlParams: string[] = [...settings.perlParams, "-c"];
+ let perlEnv = settings.perlEnv;
+ let perlEnvAdd = settings.perlEnvAdd;
const filePath = Uri.parse(textDocument.uri).fsPath;
if (settings.enableWarnings) perlParams = perlParams.concat(["-Mwarnings", "-M-warnings=redefine"]); // Force enable some warnings.
@@ -33,14 +35,26 @@ export async function perlcompile(textDocument: TextDocument, workspaceFolders:
const diagnostics: Diagnostic[] = [];
const code = getAdjustedPerlCode(textDocument, filePath);
try {
- const process = async_execFile(settings.perlPath, perlParams, { timeout: 10000, maxBuffer: 20 * 1024 * 1024 });
- process?.child?.stdin?.on("error", (error: any) => {
+ let options: {
+ timeout: number;
+ maxBuffer: number;
+ env?: { [key: string]: string | undefined };
+ } = { timeout: 10000, maxBuffer: 20 * 1024 * 1024 };
+ if (perlEnv) {
+ if (perlEnvAdd) {
+ options.env = { ...process.env, ...perlEnv };
+ } else {
+ options.env = perlEnv;
+ }
+ }
+ const perlProcess = async_execFile(settings.perlPath, perlParams, options);
+ perlProcess?.child?.stdin?.on("error", (error: any) => {
nLog("Perl Compilation Error Caught: ", settings);
nLog(error, settings);
});
- process?.child?.stdin?.write(code);
- process?.child?.stdin?.end();
- const out = await process;
+ perlProcess?.child?.stdin?.write(code);
+ perlProcess?.child?.stdin?.end();
+ const out = await perlProcess;
output = out.stderr;
stdout = out.stdout;
diff --git a/server/src/server.ts b/server/src/server.ts
index 2c33819..5803b81 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -115,6 +115,8 @@ const defaultSettings: NavigatorSettings = {
perlimportsTidyEnabled: false,
perltidyEnabled: true,
perlCompileEnabled: true,
+ perlEnv: undefined,
+ perlEnvAdd: true,
severity5: "warning",
severity4: "info",
severity3: "hint",
diff --git a/server/src/types.ts b/server/src/types.ts
index bf4394f..01ac28a 100644
--- a/server/src/types.ts
+++ b/server/src/types.ts
@@ -20,6 +20,8 @@ export interface NavigatorSettings {
perltidyEnabled: boolean;
perltidyProfile: string;
perlCompileEnabled: boolean;
+ perlEnv: undefined | { [key: string]: string };
+ perlEnvAdd: boolean;
severity5: string;
severity4: string;
severity3: string;