141 private randomLogo: RandomLogo =
new RandomLogo();
145 private documentBody:
vscode.TextDocument | undefined = undefined;
147 private filePath:
string | undefined = undefined;
149 private fileName:
string | undefined = undefined;
151 private fileExtension:
string | undefined = undefined;
153 private languageId:
string | undefined = undefined;
155 private documentEOL:
vscode.EndOfLine | undefined = undefined;
157 private documentVersion: number | undefined = undefined;
159 private headerInnerStart: number | undefined = undefined;
161 private headerInnerEnd: number | undefined = undefined;
163 private maxScanLength: number = this.Config.get(
"maxScanLength");
165 private headerLogo:
string[] = this.Config.get(
"headerLogo");
167 private projectName:
string = this.Config.get(
"extensionName");
169 private projectCopyRight:
string = this.Config.get(
"projectCopyright");
171 private addBlankLineAfterMultiline:
boolean = this.Config.get(
"headerAddBlankLineAfterMultiline");
173 private languagePrepend: Record<string, string> = this.Config.get(
"languagePrepend");
175 private languageAppend: Record<string, string> = this.Config.get(
"languageAppend");
177 private singleLineOverride: Record<string, string> = this.Config.get(
"languageSingleLineComment");
179 private multiLineOverride: Record<string, string[]> = this.Config.get(
"languageMultiLineComment");
181 private trimTrailingSpaces:
boolean = this.Config.get(
"removeTrailingHeaderSpaces");
194 constructor(languageComment:
LazyFileLoader | undefined = undefined, editor:
vscode.TextEditor | undefined = undefined, randomLogoInstance: RandomLogo | undefined = undefined) {
196 if (languageComment !== undefined) {
197 this.languageComment = languageComment;
205 this.updateFileInfo(editor.document);
208 if (!randomLogoInstance) {
224 private determineNewLine(eol:
vscode.EndOfLine): string {
225 logger.debug(
getMessage(
"inFunction",
"determineNewLine",
"CommentGenerator"));
226 if (eol ===
vscode.EndOfLine.LF) {
227 logger.debug(getMessage(
"foundNewLine",
"\\n"));
230 logger.debug(getMessage(
"foundNewLine",
"\\r\\n"));
245 private headerOpener(comment:
string, eol:
vscode.EndOfLine, projectName:
string =
this.Config.get(
"extensionName")):
string {
247 let
final:
string = comment + this.Config.get(
"headerOpenerDecorationOpen");
248 final += this.Config.get(
"telegraphBegin") +
" ";
249 final += projectName;
250 final += this.Config.get(
"headerOpenerDecorationClose");
251 final += this.determineNewLine(eol);
263 private async determineCorrectComment(): Promise<
CommentStyle> {
264 logger.debug(
getMessage(
"inFunction",
"determineCorrectComment",
"CommentGenerator"));
265 const primaryKey:
string =
"langs";
269 prompt_comment_opening_type:
false,
272 if (this.languageComment === undefined) {
274 return commentStructure;
276 const jsonContent = await this.languageComment?.get();
278 if (!jsonContent || typeof jsonContent !==
'object' || jsonContent ===
null || (primaryKey in jsonContent) ===
false) {
280 return commentStructure;
282 if (Array.isArray(jsonContent[primaryKey]) ===
false) {
284 return commentStructure;
287 const languageNodes = jsonContent[primaryKey];
288 let locatedName:
string =
"";
289 for (; index < languageNodes.length; index++) {
290 let nodeFound =
false;
291 const node = languageNodes[index];
293 const nodeLangs:
string[] = node.langs ?? [];
294 const nodeFileExtensions: Record<string, string[]> = node.fileExtensions ?? {};
296 for (let langIndex = 0; langIndex < nodeLangs.length; langIndex++) {
297 const langName = nodeLangs[langIndex].toLowerCase();
298 locatedName = langName;
300 if (langName === this.languageId?.toLowerCase()) {
305 if (this.fileExtension) {
306 const extensionsForLang = nodeFileExtensions[langName] ?? [];
307 for (let extIndex = 0; extIndex < extensionsForLang.length; extIndex++) {
308 let dot:
string =
"";
309 if (extensionsForLang[extIndex].length > 0 && extensionsForLang[extIndex][0] ===
".") {
312 if (extensionsForLang[extIndex] === `${dot}${this.fileExtension}`) {
324 logger.debug(
getMessage(
"arrayNodeContent", `Json[${primaryKey}]`, index, node));
327 logger.info(
getMessage(
"arrayNodeContent", `Json[${primaryKey}]`, index, node));
328 commentStructure.singleLine = node.singleLine ?? [];
329 commentStructure.multiLine = node.multiLine ?? [];
330 commentStructure.prompt_comment_opening_type = node.prompt_comment_opening_type ??
false;
331 commentStructure.language = locatedName ?? undefined;
332 return commentStructure;
335 logger.error(
getMessage(
"languageNotFound", String(this.languageId), this.fileExtension));
336 return commentStructure;
346 private async determineHeaderDescription(): Promise<
string[]> {
347 logger.debug(
getMessage(
"inFunction",
"determineHeaderDescription",
"CommentGenerator"));
348 const rawAny = this.Config.get(
"projectDescription");
349 let intermediate:
string =
"";
350 if (Array.isArray(rawAny)) {
351 intermediate = rawAny.join(this.determineNewLine(this.documentEOL ||
vscode.EndOfLine.LF));
353 intermediate = String(rawAny ??
"");
355 if (intermediate.trim().length === 0) {
356 const usrResponse:
string | undefined = await
query.input(
getMessage(
"getHeaderDescription"));
357 intermediate = (usrResponse ||
"");
361 const final = intermediate.split(/\r?\n/);
372 private async determineHeaderTags(): Promise<
string[]> {
373 logger.debug(
getMessage(
"inFunction",
"determineHeaderTags",
"CommentGenerator"));
374 let
final:
string[] = [];
375 const usrResponse:
string | undefined = await
query.input(
getMessage(
"getHeaderTags"));
376 final.push(usrResponse ||
"");
387 private async determineHeaderPurpose(): Promise<
string[]> {
388 logger.debug(
getMessage(
"inFunction",
"determineHeaderPurpose",
"CommentGenerator"));
389 let
final:
string[] = [];
390 const usrResponse:
string | undefined = await
query.input(
getMessage(
"getHeaderPurpose"));
391 final.push(usrResponse ||
"");
405 private async getSingleCommentOption(commentOptions:
string[]): Promise<
string> {
406 logger.debug(
getMessage(
"inFunction",
"getSingleCommentOption",
"CommentGenerator"));
407 if (commentOptions.length === 0) {
411 if (commentOptions.length === 1) {
413 return commentOptions[0];
415 const response:
string | undefined = await
query.quickPick(commentOptions,
getMessage(
"chooseSingleLineCommentOption"));
416 return response || commentOptions[0];
426 private addKeyDefinitionSeparator():
string {
427 logger.debug(
getMessage(
"inFunction",
"addKeyDefinitionSeparator",
"CommentGenerator"));
428 const userSettingDefinedElement:
string = this.Config.get(
"headerKeyDefinitionSeparator");
429 return userSettingDefinedElement || this.Config.get(
"headerKeyDefinitionSeparator");
441 private addCreationDate(comment:
string, eol:
vscode.EndOfLine) {
442 logger.debug(
getMessage(
"inFunction",
"addCreationDate",
"CommentGenerator"));
443 const now =
new Date();
444 const day = String(now.getDate()).padStart(2,
"0");
445 const month = String(now.getMonth() + 1).padStart(2,
"0");
446 const year = now.getFullYear();
447 const separatorDay:
string = this.Config.get(
"headerDateSeperatorDay");
448 const separatorMonth:
string = this.Config.get(
"headerDateSeperatorMonth");
449 const separatorYear:
string = this.Config.get(
"headerDateSeperatorYear");
450 let
final:
string = comment + this.Config.get(
"headerCreationDateKey") + this.addKeyDefinitionSeparator();
451 final += `${day}${separatorDay}${month}${separatorMonth}${year}${separatorYear}`;
452 final += this.determineNewLine(eol);
466 private addLastModifiedDate(comment:
string, eol:
vscode.EndOfLine) {
467 logger.debug(
getMessage(
"inFunction",
"addLastModifiedDate",
"CommentGenerator"));
468 const now: Date =
new Date();
469 const day:
string = String(now.getDate()).padStart(2,
"0");
470 const month:
string = String(now.getMonth() + 1).padStart(2,
"0");
471 const year: number = now.getFullYear();
472 const hour: number = now.getHours();
473 const minute: number = now.getMinutes();
474 const seconds: number = now.getSeconds();
475 const separatorDay:
string = this.Config.get(
"headerDateSeperatorDay");
476 const separatorMonth:
string = this.Config.get(
"headerDateSeperatorMonth");
477 const separatorYear:
string = this.Config.get(
"headerDateSeperatorYear");
478 const separatorTimeAndDate:
string = this.Config.get(
"headerTimeAndDateSeperator");
479 const separatorSecond:
string = this.Config.get(
"headerTimeSeperatorSecond");
480 const separatorMinute:
string = this.Config.get(
"headerTimeSeperatorMinute");
481 const separatorHour:
string = this.Config.get(
"headerTimeSeperatorHour");
482 let
final:
string = comment + this.Config.get(
"headerLastModifiedKey") + this.addKeyDefinitionSeparator();
483 final += `${hour}${separatorHour}${minute}${separatorMinute}${seconds}${separatorSecond}${separatorTimeAndDate}${day}${separatorDay}${month}${separatorMonth}${year}${separatorYear}`;
484 final += this.determineNewLine(eol);
497 private mySmartTrimmer(content:
string):
string {
498 if (this.trimTrailingSpaces) {
499 return content.trimEnd();
516 private addMultilineKey(comment:
string, eol:
vscode.EndOfLine, tagName:
string, tagDefinition:
string[]):
string {
517 logger.debug(
getMessage(
"inFunction",
"addMultilineKey",
"CommentGenerator"));
518 const eolStr:
string = this.determineNewLine(eol);
519 const keyLine:
string = comment + tagName + this.mySmartTrimmer(this.addKeyDefinitionSeparator()) + eolStr;
520 let
final:
string = keyLine;
521 for (let i = 0; i < tagDefinition.length; i++) {
522 final += comment + tagDefinition[i] + eolStr;
524 final += comment + this.Config.get(
"telegraphBlockStop") + eolStr;
525 if (this.addBlankLineAfterMultiline) {
526 final += comment + eolStr;
541 private addSingleLineKey(comment:
string, eol:
vscode.EndOfLine, tagName:
string, tagDefinition:
string):
string {
542 logger.debug(
getMessage(
"inFunction",
"addSingleLineKey",
"CommentGenerator"));
543 let
final:
string = comment + tagName + this.addKeyDefinitionSeparator();
544 final += tagDefinition + this.determineNewLine(eol);
557 private beforeHeaderCloser(comment:
string, eol:
vscode.EndOfLine):
string {
558 logger.debug(
getMessage(
"inFunction",
"beforeHeaderCloser",
"CommentGenerator"));
559 return comment + this.Config.get(
"telegraphEndOfTransmission") + this.determineNewLine(eol);
572 private headerCloser(comment:
string, eol:
vscode.EndOfLine, projectName:
string =
this.Config.get(
"extensionName")):
string {
574 let
final:
string = comment + this.Config.get(
"headerOpenerDecorationOpen");
575 final += this.Config.get(
"telegraphEnd") +
" ";
576 final += projectName;
577 final += this.Config.get(
"headerOpenerDecorationClose");
578 final += this.determineNewLine(eol);
590 private updateFileInfo(document:
vscode.TextDocument) {
591 logger.debug(
getMessage(
"inFunction",
"updateFileInfo",
"CommentGenerator"));
592 this.headerInnerEnd = undefined;
593 this.headerInnerStart = undefined;
594 this.documentBody = document;
595 if (this.Config.get(
"useWorkspaceNameWhenAvailable")) {
596 this.projectName = this.Config.get(
"workspaceName") || this.Config.get(
"extensionName");
598 this.projectName = this.Config.get(
"extensionName");
600 this.filePath = this.documentBody.uri.fsPath;
601 this.projectCopyRight = this.Config.get(
"projectCopyright");
602 this.addBlankLineAfterMultiline = this.Config.get(
"headerAddBlankLineAfterMultiline");
603 this.maxScanLength = this.Config.get(
"defaultMaxScanLength") + this.headerLogo.length;
604 this.fileName = this.documentBody.uri.path.split(
'/').pop() ||
"unknown";
605 if (this.fileName.includes(
'.')) {
606 this.fileExtension = this.fileName.split(
'.').pop() ||
"none";
608 this.fileExtension =
"none";
610 this.languageId = this.documentBody.languageId;
611 this.documentEOL = this.documentBody.eol;
612 this.documentVersion = this.documentBody.version;
631 private prependIfPresent(buildHeader:
string[], eol:
vscode.EndOfLine, languageId?:
string):
string[] {
632 if (languageId === undefined) {
637 let instanceCleaned:
string =
instance;
639 instanceCleaned =
instance.join(this.determineNewLine(eol));
641 buildHeader.push(instanceCleaned);
642 logger.debug(
getMessage(
"languagePrependApplied", languageId, instanceCleaned));
664 private appendIfPresent(buildHeader:
string[], eol:
vscode.EndOfLine, languageId?:
string):
string[] {
665 if (languageId === undefined) {
670 let instanceCleaned:
string =
instance;
672 instanceCleaned =
instance.join(this.determineNewLine(eol));
674 buildHeader.push(instanceCleaned);
675 logger.debug(
getMessage(
"languageAppendApplied", languageId, instanceCleaned));
704 if (!determinedComment.language) {
705 return determinedComment;
708 const languageId = determinedComment.language;
711 const singleOverride = this.singleLineOverride[languageId];
712 if (singleOverride !== undefined) {
714 if (Array.isArray(singleOverride)) {
715 determinedComment.singleLine = singleOverride;
717 determinedComment.singleLine = [singleOverride];
719 logger.debug(
getMessage(
"singleLineCommentOverrideApplied", languageId, determinedComment.singleLine));
723 const multiOverride = this.multiLineOverride[languageId];
724 if (multiOverride !== undefined) {
726 determinedComment.multiLine = multiOverride;
727 logger.debug(
getMessage(
"multiLineCommentOverrideApplied", languageId, determinedComment.multiLine));
730 return determinedComment;
741 private async getCorrectCommentPrefix(determinedComment:
CommentStyle): Promise<
string[]> {
742 logger.debug(
getMessage(
"inFunction",
"getCorrectPrefix",
"CommentGenerator"));
743 let commentOpener:
string =
"";
744 let commentMiddle:
string =
"";
745 let commentCloser:
string =
"";
746 const determinedComment_checked:
CommentStyle = this.getOverrideIfPresent(determinedComment);
747 if (determinedComment_checked.multiLine.length >= 2 &&
this.preferSingleLineComments ===
false) {
748 commentOpener = determinedComment_checked.multiLine[0];
749 if (determinedComment_checked.multiLine.length >= 3) {
750 commentMiddle = determinedComment_checked.multiLine[1];
751 commentCloser = determinedComment_checked.multiLine[2];
754 commentCloser = determinedComment_checked.multiLine[1];
756 }
else if (determinedComment_checked.singleLine.length > 0) {
757 if (determinedComment_checked.prompt_comment_opening_type) {
759 const commentString:
string = await this.getSingleCommentOption(determinedComment_checked.singleLine);
760 commentOpener = commentString;
761 commentMiddle = commentString;
762 commentCloser = commentString;
764 commentOpener = determinedComment_checked.singleLine[0];
765 commentMiddle = determinedComment_checked.singleLine[0];
766 commentCloser = determinedComment_checked.singleLine[0];
773 commentOpener += this.Config.get(
"headerCommentSpacing");
774 commentMiddle += this.Config.get(
"headerCommentSpacing");
775 commentCloser += this.Config.get(
"headerCommentSpacing");
776 return [commentOpener, commentMiddle, commentCloser];
794 private async buildTheHeader(comments:
string[], languageId?:
string): Promise<
string[]> {
795 logger.debug(
getMessage(
"inFunction",
"buildTheHeader",
"CommentGenerator"));
796 const eol:
vscode.EndOfLine = this.documentEOL ||
vscode.EndOfLine.LF;
797 const unknownTerm:
string =
getMessage(
"unknown");
798 const commentOpener:
string = comments[0] ||
"";
799 const commentMiddle:
string = comments[1] ||
"";
800 const commentCloser:
string = comments[2] ||
"";
801 let buildHeader:
string[] = [];
803 buildHeader = this.prependIfPresent(buildHeader, eol, languageId);
805 if (commentOpener.length > 0) {
806 buildHeader.push(`${commentOpener}${this.determineNewLine(eol)}`);
809 buildHeader.push(this.headerOpener(commentMiddle, eol, this.projectName));
811 let logoContent = this.headerLogo;
812 if (this.Config.get(
"randomLogo") ===
true) {
814 const gatheredLogo:
logo = await this.
randomLogo.getRandomLogoFromFolder();
815 if (gatheredLogo.logoContent !== undefined) {
816 logoContent = gatheredLogo.logoContent;
824 buildHeader.push(this.addMultilineKey(commentMiddle, eol, this.Config.get(
"headerLogoKey"), logoContent));
826 buildHeader.push(this.addSingleLineKey(commentMiddle, eol, this.Config.get(
"headerProjectKey"),
this.projectName));
828 buildHeader.push(this.addSingleLineKey(commentMiddle, eol, this.Config.get(
"headerFileKey"),
this.fileName || unknownTerm));
830 buildHeader.push(this.addCreationDate(commentMiddle, eol));
832 buildHeader.push(this.addLastModifiedDate(commentMiddle, eol));
834 buildHeader.push(this.addMultilineKey(commentMiddle, eol, this.Config.get(
"headerDescriptionKey"), await
this.determineHeaderDescription()));
836 buildHeader.push(this.addSingleLineKey(commentMiddle, eol, this.Config.get(
"headerCopyrightKey"),
this.projectCopyRight));
840 buildHeader.push(this.addSingleLineKey(commentMiddle, eol, this.Config.get(
"headerPurposeKey"), (await
this.determineHeaderPurpose()).join(
";")));
842 buildHeader.push(this.beforeHeaderCloser(commentMiddle, eol));
844 buildHeader.push(this.headerCloser(commentMiddle, eol, this.projectName));
845 if (commentCloser.length > 0) {
846 buildHeader.push(`${commentCloser}${this.determineNewLine(eol)}`);
849 buildHeader = this.appendIfPresent(buildHeader, eol, languageId);
862 private async updateEditDate(document:
vscode.TextDocument, comments:
string[]) {
863 logger.debug(
getMessage(
"inFunction",
"updateEditDate",
"CommentGenerator"));
864 const commentOpener:
string = comments[0] ||
"";
865 const commentMiddle:
string = comments[1] ||
"";
866 const commentCloser:
string = comments[2] ||
"";
867 if (this.headerInnerStart === undefined || this.headerInnerEnd === undefined) {
868 const errMsg:
string =
getMessage(
"updateEditDateMissingBounds");
873 if (!this.documentBody) {
874 const errMsg:
string =
getMessage(
"emptyDocument");
880 const eol = this.documentEOL ||
vscode.EndOfLine.LF;
881 const lastModifiedKey = this.Config.get(
"headerLastModifiedKey");
884 const newLine = this.addLastModifiedDate(commentMiddle, eol).trimEnd();
886 let targetLine: number | undefined = undefined;
889 for (let i = this.headerInnerStart; i <= this.headerInnerEnd; i++) {
890 const lineText = this.documentBody.lineAt(i).text;
891 if (lineText.includes(lastModifiedKey)) {
897 if (targetLine === undefined) {
898 const errMsg:
string =
getMessage(
"lastModifiedLineNotFound");
904 const edit =
new vscode.WorkspaceEdit();
905 const range = document.lineAt(targetLine).range;
906 edit.replace(document.uri, range, newLine);
907 await
vscode.workspace.applyEdit(edit);
909 const msg:
string =
getMessage(
"lastModifiedUpdated");
923 protected locateIfHeaderPresent(comments:
string[]): boolean | undefined {
924 logger.debug(
getMessage(
"inFunction",
"locateIfHeaderPresent",
"CommentGenerator"));
925 const commentOpener:
string = comments[0] ||
"";
926 const commentMiddle:
string = comments[1] ||
"";
927 const commentCloser:
string = comments[2] ||
"";
928 this.headerInnerStart = undefined;
929 this.headerInnerEnd = undefined;
930 if (this.documentBody === undefined) {
934 if (this.documentBody.isClosed) {
935 logger.warning(getMessage(
"closedDocument"));
938 const documentTotalLines: number =
this.documentBody.lineCount;
939 const eol:
vscode.EndOfLine =
this.documentEOL ??
vscode.EndOfLine.LF;
940 const opener:
string =
this.headerOpener(commentMiddle, eol,
this.projectName).trimEnd();
941 const closer:
string =
this.headerCloser(commentMiddle, eol,
this.projectName).trimEnd();
942 const scanLines: number = Math.min(
this.maxScanLength, documentTotalLines);
943 const graceLines: number = Math.min((
this.maxScanLength * 2), documentTotalLines);
944 let lineOpenerFound:
boolean =
false;
945 let lineCloserFound:
boolean =
false;
946 for (let i = 0; i < scanLines || (i < graceLines && lineOpenerFound && !lineCloserFound); i++) {
947 const lineText = this.documentBody.lineAt(i).text;
948 if (i >= scanLines) {
953 if (lineText === closer && !lineOpenerFound) {
959 if (lineText === opener && lineCloserFound) {
965 if (lineText === opener && !lineOpenerFound) {
966 lineOpenerFound =
true;
967 this.headerInnerStart = i;
973 if (lineText === closer && !lineCloserFound) {
974 this.headerInnerEnd = i;
975 lineCloserFound =
true;
978 if (lineCloserFound && lineOpenerFound) {
983 logger.Gui.warning(
getMessage(
"documentLineScanExceeded", this.maxScanLength));
1002 private skipFirstLineInDocument(document:
vscode.TextDocument): number {
1005 if (document.lineCount > 0) {
1006 const firstLine = document.lineAt(0).text;
1007 if (firstLine.startsWith(
"#!")) {
1023 private async writeHeaderToFile(document:
vscode.TextDocument, comments:
string[], languageId?:
string): Promise<number> {
1024 logger.debug(
getMessage(
"inFunction",
"writeHeaderToFile",
"CommentGenerator"));
1026 const headerLines = await this.buildTheHeader(comments, languageId);
1027 const headerText = headerLines.join(
"");
1028 const edit =
new vscode.WorkspaceEdit();
1029 const insertLine: number = this.skipFirstLineInDocument(document);
1032 new vscode.Position(insertLine, 0),
1036 await
vscode.workspace.applyEdit(edit);
1037 return this.Config.get(
"statusSuccess");
1051 async injectHeader() {
1052 logger.debug(
getMessage(
"inFunction",
"injectHeader",
"CommentGenerator"));
1053 const editor =
vscode.window.activeTextEditor;
1054 if (editor === undefined) {
1059 this.updateFileInfo(editor.document);
1062 this.documentBody === undefined || this.filePath === undefined
1063 || this.fileName === undefined || this.fileExtension === undefined
1064 || this.languageId === undefined || this.documentEOL === undefined
1065 || this.documentVersion === undefined
1072 if (this.documentBody.isClosed) {
1074 logger.Gui.warning(
getMessage(
"updateAbortedBecauseFileClosedSyncCancelled"));
1078 const msg =
getMessage(
"inputArgs", JSON.stringify(
this.documentBody), JSON.stringify(
this.filePath), JSON.stringify(
this.fileName), JSON.stringify(
this.fileExtension), JSON.stringify(
this.languageId), JSON.stringify(
this.documentEOL), JSON.stringify(
this.documentVersion));
1082 const determineComment:
CommentStyle = await this.determineCorrectComment();
1083 const comments:
string[] = await this.getCorrectCommentPrefix(determineComment);
1085 let response:
boolean | undefined = this.locateIfHeaderPresent(comments);
1086 if (response === undefined) {
1087 logger.Gui.warning(
getMessage(
"updateAbortedBecauseFileClosedSyncCancelled"));
1090 if (response ===
true) {
1092 await this.updateEditDate(editor.document, comments);
1095 if (response ===
false) {
1096 let status: number = await this.writeHeaderToFile(editor.document, comments, determineComment.language);
1097 if (status === this.Config.get(
"statusError")) {
1113 private async allowedToActivate(): Promise<boolean> {
1114 logger.debug(
getMessage(
"inFunction",
"allowedToActivate",
"CommentGenerator"));
1115 const ignored:
string[] =
CodeConfig.get(
"extensionIgnore") ?? [];
1117 for (
const pattern of ignored) {
1119 this.fileExtension && minimatch(this.fileExtension, pattern) ||
1120 this.fileName && minimatch(this.fileName, pattern) ||
1121 this.filePath && minimatch(this.filePath, pattern)
1138 updateLogoInstanceRandomiser(randomLogoInstance: RandomLogo): void {
1139 logger.debug(
getMessage(
"inFunction",
"updateLogoInstanceRandomiser",
"CommentGenerator"));
1153 async refreshHeader(document:
vscode.TextDocument | undefined) {
1154 logger.debug(
getMessage(
"inFunction",
"refreshHeader",
"CommentGenerator"));
1160 if (document === undefined) {
1164 this.updateFileInfo(document);
1167 this.documentBody === undefined || this.filePath === undefined
1168 || this.fileName === undefined || this.fileExtension === undefined
1169 || this.languageId === undefined || this.documentEOL === undefined
1170 || this.documentVersion === undefined
1177 if (!await this.allowedToActivate()) {
1182 if (this.documentBody.isClosed) {
1184 logger.Gui.warning(
getMessage(
"updateAbortedBecauseFileClosedSyncCancelled"));
1188 const msg =
getMessage(
"inputArgs", JSON.stringify(
this.documentBody), JSON.stringify(
this.filePath), JSON.stringify(
this.fileName), JSON.stringify(
this.fileExtension), JSON.stringify(
this.languageId), JSON.stringify(
this.documentEOL), JSON.stringify(
this.documentVersion));
1192 const determineComment:
CommentStyle = await this.determineCorrectComment();
1193 const comments:
string[] = await this.getCorrectCommentPrefix(determineComment);
1195 const response:
boolean | undefined = this.locateIfHeaderPresent(comments);
1196 if (response === undefined) {
1197 logger.Gui.warning(
getMessage(
"updateAbortedBecauseFileClosedSyncCancelled"));
1200 if (response ===
false) {
1206 const questionResponse:
boolean = await
query.confirm(
getMessage(
"headerInjectQuestion"));
1207 if (questionResponse ===
false) {
1211 const status: number = await this.writeHeaderToFile(document, comments, determineComment.language);
1212 if (status === this.Config.get(
"statusError")) {
1218 if (response ===
true) {
1220 await this.updateEditDate(document, comments);