summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristoph Schlosser <2466365+cschlosser@users.noreply.github.com>2020-10-03 19:43:04 +0200
committerGitHub <noreply@github.com>2020-10-03 19:43:04 +0200
commit28bd14d438affce02c87b7e7b108c3016feba6a4 (patch)
treedf29743c7267a3f3c86c2b95316c017400c463fb /src
parent00f7ec244e65f4d9e1ec25f693c62c9f4f1a2581 (diff)
downloaddoxdocgen-28bd14d438affce02c87b7e7b108c3016feba6a4.tar.gz
Add env-var to replace env var in template strings (#175)
* Add env-var to replace env var in template strings * Windows has it’s user in USERNAME
Diffstat (limited to 'src')
-rw-r--r--src/Lang/Cpp/CppDocGen.ts36
-rw-r--r--src/test/CppTests/Config.test.ts20
2 files changed, 50 insertions, 6 deletions
diff --git a/src/Lang/Cpp/CppDocGen.ts b/src/Lang/Cpp/CppDocGen.ts
index 1e73804..2795ec6 100644
--- a/src/Lang/Cpp/CppDocGen.ts
+++ b/src/Lang/Cpp/CppDocGen.ts
@@ -1,10 +1,10 @@
+import * as env from "env-var";
import * as moment from "moment";
-import { Position, Range, Selection, TextEditor, TextLine, WorkspaceEdit } from "vscode";
+import { Position, Range, Selection, TextEditor } from "vscode";
import { IDocGen } from "../../Common/IDocGen";
import { Config } from "../../Config";
import { CppArgument } from "./CppArgument";
import * as CppParser from "./CppParser";
-import { CppParseTree } from "./CppParseTree";
import { CppToken, CppTokenType } from "./CppToken";
export enum SpecialCase {
@@ -144,9 +144,31 @@ export class CppDocGen implements IDocGen {
return indentedString;
}
+ protected getEnvVars(replace: string): string {
+ let replacement = replace;
+ const regex = /\$\{env\:([\w|\d|_]+)\}/m;
+ let match: RegExpExecArray;
+
+ // tslint:disable-next-line:no-conditional-assignment
+ while ((match = regex.exec(replacement)) !== null) {
+ if (match.index === regex.lastIndex) {
+ regex.lastIndex++;
+ }
+
+ const m = match[1];
+
+ const envVar: string = env.get(m, m).asString();
+
+ replacement = replacement.replace("${env:" + m + "}", envVar);
+ }
+
+ return replacement;
+ }
+
protected getTemplatedString(replace: string, template: string, param: string): string {
const replacedTemplate = template.replace(replace, param);
- return this.getIndentedTemplate(replacedTemplate);
+ const replacedWithEnv = this.getEnvVars(replacedTemplate);
+ return this.getIndentedTemplate(replacedWithEnv);
}
protected getMultiTemplatedString(replace: string[], template: string, param: string[]): string {
@@ -156,7 +178,7 @@ export class CppDocGen implements IDocGen {
template = template.replace(replace[i], param[i]);
}
}
- return template;
+ return this.getEnvVars(template);
}
protected getSmartText(): string {
@@ -453,13 +475,15 @@ export class CppDocGen implements IDocGen {
lines,
this.cfg.typeTemplateReplace,
this.cfg.Generic.returnTemplate,
- returnParams
+ returnParams,
);
}
break;
}
case "custom": {
- lines.push(...this.cfg.Generic.customTags);
+ this.cfg.Generic.customTags.forEach((elem) => {
+ lines.push(this.getEnvVars(elem));
+ });
break;
}
default: {
diff --git a/src/test/CppTests/Config.test.ts b/src/test/CppTests/Config.test.ts
index 3915f11..d479d2d 100644
--- a/src/test/CppTests/Config.test.ts
+++ b/src/test/CppTests/Config.test.ts
@@ -227,4 +227,24 @@ suite("C++ - Configuration Tests", () => {
assert.equal("/**\n * @note\n */", result);
});
+ test("Env variable", () => {
+ testSetup.cfg = new Config();
+ testSetup.cfg.Generic.order = ["custom"];
+ if (process.platform === "win32") {
+ testSetup.cfg.Generic.customTags = ["@author ${env:USERNAME}"];
+ const res = testSetup.SetLine("void foo();").GetResult();
+ // USERNAME env var is different for everybody
+ assert.notEqual("/**\n * @author USERNAME\n */", res);
+ } else {
+ testSetup.cfg.Generic.customTags = ["@author ${env:USER}"];
+ const res = testSetup.SetLine("void foo();").GetResult();
+ // USER env var is different for everybody
+ assert.notEqual("/**\n * @author USER\n */", res);
+ }
+
+ testSetup.cfg.Generic.customTags = ["@author ${env:MY_VARIABLE}"];
+ const result = testSetup.SetLine("void foo();").GetResult();
+ assert.equal("/**\n * @author MY_VARIABLE\n */", result);
+ });
+
});