From 4939806ae705953cfc1ca8cf54f20d98e9be9d03 Mon Sep 17 00:00:00 2001 From: Dean Anderson Date: Thu, 27 Sep 2018 16:51:01 -0400 Subject: customTag will supply ISO date format if user configured format empty Added separate templates for author name {author} and email {email} Added method to make multiple template substitutions in a string customTag will now replace {author}, {email}, {date} and {year} templates --- src/Config.ts | 8 +++++- src/Lang/Cpp/CppDocGen.ts | 42 ++++++++++++++++++++++++++----- src/test/CppTests/Config.test.ts | 2 +- src/test/CppTests/FileDescription.test.ts | 33 ++++++++++++++++++++++-- 4 files changed, 75 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/Config.ts b/src/Config.ts index 54d227a..b33aff2 100644 --- a/src/Config.ts +++ b/src/Config.ts @@ -49,7 +49,9 @@ class Generic { public paramTemplate: string = "@param {param} "; public returnTemplate: string = "@return {type} "; public linesToGet: number = 20; - public authorTag: string = "@author your name"; + public authorName: string = "your name"; + public authorEmail: string = "you@domain.com"; + public authorTag: string = "@author {author} ({email})"; public dateTemplate: string = "@date {date}"; public dateFormat: string = "YYYY-MM-DD"; public generateSmartText: boolean = true; @@ -86,6 +88,8 @@ export class Config { values.Generic.returnTemplate = Generic.getConfiguration().get("returnTemplate", values.Generic.returnTemplate); values.Generic.linesToGet = Generic.getConfiguration().get("linesToGet", values.Generic.linesToGet); values.Generic.authorTag = Generic.getConfiguration().get("authorTag", values.Generic.authorTag); + values.Generic.authorName = Generic.getConfiguration().get("authorName", values.Generic.authorName); + values.Generic.authorEmail = Generic.getConfiguration().get("authorEmail", values.Generic.authorEmail); values.Generic.dateTemplate = Generic.getConfiguration().get("dateTemplate", values.Generic.dateTemplate); values.Generic.dateFormat = Generic.getConfiguration().get("dateFormat", values.Generic.dateFormat); values.Generic.generateSmartText = Generic.getConfiguration().get("generateSmartText", values.Generic.generateSmartText); @@ -98,6 +102,8 @@ export class Config { public readonly paramTemplateReplace: string = "{param}"; public readonly typeTemplateReplace: string = "{type}"; public readonly nameTemplateReplace: string = "{name}"; + public readonly authorTemplateReplace: string = "{author}"; + public readonly emailTemplateReplace: string = "{email}"; public readonly dateTemplateReplace: string = "{date}"; public readonly yearTemplateReplace: string = "{year}"; public readonly textTemplateReplace: string = "{text}"; diff --git a/src/Lang/Cpp/CppDocGen.ts b/src/Lang/Cpp/CppDocGen.ts index e71d39e..705b72c 100644 --- a/src/Lang/Cpp/CppDocGen.ts +++ b/src/Lang/Cpp/CppDocGen.ts @@ -105,6 +105,18 @@ export class CppDocGen implements IDocGen { return template.replace(replace, param); } + protected getMultiTemplatedString(replace: string[], template: string, param: string[]): string { + // FIXME I find this argument order a bit strange. I would probably have template first + // For each replace entry, attempt to replace it with the corresponding param in the template + for(var i=0;i { this.generateFromTemplate( lines, @@ -246,12 +267,21 @@ export class CppDocGen implements IDocGen { } protected generateCustomTag(lines: string[]) { + let dateFormat: string = "YYYY-MM-DD"; // Default to ISO standard if not defined + if ( this.cfg.Generic.dateFormat.trim().length != 0) { + dateFormat = this.cfg.Generic.dateFormat; // Overwrite with user format + } + // For each line of the customTag this.cfg.File.customTag.forEach((element) => { - this.generateFromTemplate( - lines, - this.cfg.dateTemplateReplace, - element, - [moment().format(this.cfg.Generic.dateFormat)], + // Allow any of date, year, author, email to be replaced + lines.push(this.cfg.C.commentPrefix + + this.getMultiTemplatedString( + [this.cfg.authorTemplateReplace, this.cfg.emailTemplateReplace, + this.cfg.dateTemplateReplace, this.cfg.yearTemplateReplace], + element, + [this.cfg.Generic.authorName, this.cfg.Generic.authorEmail, + moment().format(dateFormat), moment().format("YYYY")] + ) ); }); } diff --git a/src/test/CppTests/Config.test.ts b/src/test/CppTests/Config.test.ts index 69837ce..a4c96e6 100644 --- a/src/test/CppTests/Config.test.ts +++ b/src/test/CppTests/Config.test.ts @@ -113,7 +113,7 @@ suite("C++ - Configuration Tests", () => { testSetup.firstLine = 0; testSetup.cfg.File.fileOrder = ["brief", "author", "date", "file"]; const result = testSetup.SetLine("").GetResult(); - assert.equal("/**\n * @brief \n * @author your name\n" + + assert.equal("/**\n * @brief \n * @author your name (you@domain.com)\n" + " * @date " + moment().format("YYYY-MM-DD") + "\n * @file MockDocument.h\n */", result); }); diff --git a/src/test/CppTests/FileDescription.test.ts b/src/test/CppTests/FileDescription.test.ts index 8c8d4d4..362c17a 100644 --- a/src/test/CppTests/FileDescription.test.ts +++ b/src/test/CppTests/FileDescription.test.ts @@ -15,18 +15,20 @@ import TestSetup from "./TestSetup"; // Defines a Mocha test suite to group tests of similar kind together suite("File Description Tests", () => { const testSetup: TestSetup = new TestSetup("void foo();"); + testSetup.cfg.File.fileOrder = ["brief", "empty", "file", "author", "date"]; const date = moment().format("YYYY-MM-DD"); + const year = moment().format("YYYY"); // Tests test("#include on next line", () => { const result = testSetup.SetLine("#include ").GetResult(); - assert.equal("/**\n * @brief \n * \n * @file MockDocument.h\n * @author your name\n" + + assert.equal("/**\n * @brief \n * \n * @file MockDocument.h\n * @author your name (you@domain.com)\n" + " * @date " + date + "\n */", result); }); test("On first line of document", () => { const result = testSetup.SetLine("").GetResult(); - assert.equal("/**\n * @brief \n * \n * @file MockDocument.h\n * @author your name\n" + + assert.equal("/**\n * @brief \n * \n * @file MockDocument.h\n * @author your name (you@domain.com)\n" + " * @date " + date + "\n */", result); }); @@ -35,4 +37,31 @@ suite("File Description Tests", () => { const result = testSetup.SetLine("").GetResult(); assert.equal("/**\n */", result); }); + + test("version block", () => { + testSetup.cfg.File.fileOrder = ["version"]; + const result = testSetup.SetLine("").GetResult(); + assert.equal("/**\n * @version 0.1\n */", result); + }); + + test("Copyright block", () => { + testSetup.cfg.File.fileOrder = ["copyright"]; + const result = testSetup.SetLine("").GetResult(); + assert.equal("/**\n * @copyright Copyright (c) " + year + "\n */", result); + }); + + test("version block", () => { + testSetup.cfg.File.fileOrder = ["version"]; + const result = testSetup.SetLine("").GetResult(); + assert.equal("/**\n * @version 0.1\n */", result); + }); + + test("custom block", () => { + testSetup.cfg.File.fileOrder = ["custom"]; + testSetup.cfg.File.customTag = ["First Line", "{year} Year Line", "{date} Date Line", + "{author} Author Line", "{email} Email Line"]; + const result = testSetup.SetLine("").GetResult(); + assert.equal("/**\n * First Line\n * " + year + " Year Line\n * " + date + " Date Line\n" + + " * your name Author Line\n * you@domain.com Email Line\n */", result); + }); }); -- cgit v1.2.3