142 private randomLogo: RandomLogo =
new RandomLogo();
146 private documentBody:
vscode.TextDocument | undefined = undefined;
148 private filePath:
string | undefined = undefined;
150 private fileName:
string | undefined = undefined;
152 private fileExtension:
string | undefined = undefined;
154 private languageId:
string | undefined = undefined;
156 private documentEOL:
vscode.EndOfLine | undefined = undefined;
158 private documentVersion: number | undefined = undefined;
160 private headerInnerStart: number | undefined = undefined;
162 private headerInnerEnd: number | undefined = undefined;
164 private maxScanLength: number = this.Config.get(
"maxScanLength");
166 private headerLogo:
string[] = this.Config.get(
"headerLogo");
172 private headerLogoVersions: Record<string, string[]> = this.Config.get(
"headerLogoVersions");
187 private projectName:
string = this.Config.get(
"extensionName");
189 private projectCopyRight:
string = this.Config.get(
"projectCopyright");
191 private addBlankLineAfterMultiline:
boolean = this.Config.get(
"headerAddBlankLineAfterMultiline");
193 private languagePrepend: Record<string, string> = this.Config.get(
"languagePrepend");
195 private languageAppend: Record<string, string> = this.Config.get(
"languageAppend");
197 private singleLineOverride: Record<string, string> = this.Config.get(
"languageSingleLineComment");
199 private multiLineOverride: Record<string, string[]> = this.Config.get(
"languageMultiLineComment");
201 private trimTrailingSpaces:
boolean = this.Config.get(
"removeTrailingHeaderSpaces");
214 constructor(languageComment:
LazyFileLoader | undefined = undefined, editor:
vscode.TextEditor | undefined = undefined, randomLogoInstance: RandomLogo | undefined = undefined) {
216 if (languageComment !== undefined) {
217 this.languageComment = languageComment;
225 this.updateFileInfo(editor.document);
228 if (!randomLogoInstance) {
244 private determineNewLine(eol:
vscode.EndOfLine): string {
245 logger.debug(
getMessage(
"inFunction",
"determineNewLine",
"CommentGenerator"));
246 if (eol ===
vscode.EndOfLine.LF) {
247 logger.debug(getMessage(
"foundNewLine",
"\\n"));
250 logger.debug(getMessage(
"foundNewLine",
"\\r\\n"));
265 private headerOpener(comment:
string, eol:
vscode.EndOfLine, projectName:
string =
this.Config.get(
"extensionName")):
string {
267 let
final:
string = comment + this.Config.get(
"headerOpenerDecorationOpen");
268 final += this.Config.get(
"telegraphBegin") +
" ";
269 final += projectName;
270 final += this.Config.get(
"headerOpenerDecorationClose");
271 final += this.determineNewLine(eol);
283 private async determineCorrectComment(): Promise<
CommentStyle> {
284 logger.debug(
getMessage(
"inFunction",
"determineCorrectComment",
"CommentGenerator"));
285 const primaryKey:
string =
"langs";
289 prompt_comment_opening_type:
false,
292 if (this.languageComment === undefined) {
294 return commentStructure;
296 const jsonContent = await this.languageComment?.get();
298 if (!jsonContent || typeof jsonContent !==
'object' || jsonContent ===
null || (primaryKey in jsonContent) ===
false) {
300 return commentStructure;
302 if (Array.isArray(jsonContent[primaryKey]) ===
false) {
304 return commentStructure;
307 const languageNodes = jsonContent[primaryKey];
308 let locatedName:
string =
"";
309 for (; index < languageNodes.length; index++) {
310 let nodeFound =
false;
311 const node = languageNodes[index];
313 const nodeLangs:
string[] = node.langs ?? [];
314 const nodeFileExtensions: Record<string, string[]> = node.fileExtensions ?? {};
316 for (let langIndex = 0; langIndex < nodeLangs.length; langIndex++) {
317 const langName = nodeLangs[langIndex].toLowerCase();
318 locatedName = langName;
320 if (langName === this.languageId?.toLowerCase()) {
325 if (this.fileExtension) {
326 const extensionsForLang = nodeFileExtensions[langName] ?? [];
327 for (let extIndex = 0; extIndex < extensionsForLang.length; extIndex++) {
328 let dot:
string =
"";
329 if (extensionsForLang[extIndex].length > 0 && extensionsForLang[extIndex][0] ===
".") {
332 if (extensionsForLang[extIndex] === `${dot}${this.fileExtension}`) {
344 logger.debug(
getMessage(
"arrayNodeContent", `Json[${primaryKey}]`, index, node));
347 logger.info(
getMessage(
"arrayNodeContent", `Json[${primaryKey}]`, index, node));
348 commentStructure.singleLine = node.singleLine ?? [];
349 commentStructure.multiLine = node.multiLine ?? [];
350 commentStructure.prompt_comment_opening_type = node.prompt_comment_opening_type ??
false;
351 commentStructure.language = locatedName ?? undefined;
352 return commentStructure;
355 logger.error(
getMessage(
"languageNotFound", String(this.languageId), this.fileExtension));
356 return commentStructure;
366 private async determineHeaderDescription(): Promise<
string[]> {
367 logger.debug(
getMessage(
"inFunction",
"determineHeaderDescription",
"CommentGenerator"));
368 const rawAny = this.Config.get(
"projectDescription");
369 let intermediate:
string =
"";
370 if (Array.isArray(rawAny)) {
371 intermediate = rawAny.join(this.determineNewLine(this.documentEOL ||
vscode.EndOfLine.LF));
373 intermediate = String(rawAny ??
"");
375 if (intermediate.trim().length === 0) {
376 const usrResponse:
string | undefined = await
query.input(
getMessage(
"getHeaderDescription"));
377 intermediate = (usrResponse ||
"");
381 const final = intermediate.split(/\r?\n/);
392 private async determineHeaderTags(): Promise<
string[]> {
393 logger.debug(
getMessage(
"inFunction",
"determineHeaderTags",
"CommentGenerator"));
394 let
final:
string[] = [];
395 const usrResponse:
string | undefined = await
query.input(
getMessage(
"getHeaderTags"));
396 final.push(usrResponse ||
"");
407 private async determineHeaderPurpose(): Promise<
string[]> {
408 logger.debug(
getMessage(
"inFunction",
"determineHeaderPurpose",
"CommentGenerator"));
409 let
final:
string[] = [];
410 const usrResponse:
string | undefined = await
query.input(
getMessage(
"getHeaderPurpose"));
411 final.push(usrResponse ||
"");
425 private async getSingleCommentOption(commentOptions:
string[]): Promise<
string> {
426 logger.debug(
getMessage(
"inFunction",
"getSingleCommentOption",
"CommentGenerator"));
427 if (commentOptions.length === 0) {
431 if (commentOptions.length === 1) {
433 return commentOptions[0];
435 const response:
string | undefined = await
query.quickPick(commentOptions,
getMessage(
"chooseSingleLineCommentOption"));
436 return response || commentOptions[0];
446 private addKeyDefinitionSeparator():
string {
447 logger.debug(
getMessage(
"inFunction",
"addKeyDefinitionSeparator",
"CommentGenerator"));
448 const userSettingDefinedElement:
string = this.Config.get(
"headerKeyDefinitionSeparator");
449 return userSettingDefinedElement || this.Config.get(
"headerKeyDefinitionSeparator");
461 private addCreationDate(comment:
string, eol:
vscode.EndOfLine) {
462 logger.debug(
getMessage(
"inFunction",
"addCreationDate",
"CommentGenerator"));
463 const now =
new Date();
464 const day = String(now.getDate()).padStart(2,
"0");
465 const month = String(now.getMonth() + 1).padStart(2,
"0");
466 const year = now.getFullYear();
467 const separatorDay:
string = this.Config.get(
"headerDateSeperatorDay");
468 const separatorMonth:
string = this.Config.get(
"headerDateSeperatorMonth");
469 const separatorYear:
string = this.Config.get(
"headerDateSeperatorYear");
470 let
final:
string = comment + this.Config.get(
"headerCreationDateKey") + this.addKeyDefinitionSeparator();
471 final += `${day}${separatorDay}${month}${separatorMonth}${year}${separatorYear}`;
472 final += this.determineNewLine(eol);
486 private addLastModifiedDate(comment:
string, eol:
vscode.EndOfLine) {
487 logger.debug(
getMessage(
"inFunction",
"addLastModifiedDate",
"CommentGenerator"));
488 const now: Date =
new Date();
489 const day:
string = String(now.getDate()).padStart(2,
"0");
490 const month:
string = String(now.getMonth() + 1).padStart(2,
"0");
491 const year: number = now.getFullYear();
492 const hour: number = now.getHours();
493 const minute: number = now.getMinutes();
494 const seconds: number = now.getSeconds();
495 const separatorDay:
string = this.Config.get(
"headerDateSeperatorDay");
496 const separatorMonth:
string = this.Config.get(
"headerDateSeperatorMonth");
497 const separatorYear:
string = this.Config.get(
"headerDateSeperatorYear");
498 const separatorTimeAndDate:
string = this.Config.get(
"headerTimeAndDateSeperator");
499 const separatorSecond:
string = this.Config.get(
"headerTimeSeperatorSecond");
500 const separatorMinute:
string = this.Config.get(
"headerTimeSeperatorMinute");
501 const separatorHour:
string = this.Config.get(
"headerTimeSeperatorHour");
502 let
final:
string = comment + this.Config.get(
"headerLastModifiedKey") + this.addKeyDefinitionSeparator();
503 final += `${hour}${separatorHour}${minute}${separatorMinute}${seconds}${separatorSecond}${separatorTimeAndDate}${day}${separatorDay}${month}${separatorMonth}${year}${separatorYear}`;
504 final += this.determineNewLine(eol);
517 private mySmartTrimmer(content:
string):
string {
518 if (this.trimTrailingSpaces) {
519 return content.trimEnd();
536 private addMultilineKey(comment:
string, eol:
vscode.EndOfLine, tagName:
string, tagDefinition:
string[]):
string {
537 logger.debug(
getMessage(
"inFunction",
"addMultilineKey",
"CommentGenerator"));
538 const eolStr:
string = this.determineNewLine(eol);
539 const keyLine:
string = comment + tagName + this.mySmartTrimmer(this.addKeyDefinitionSeparator()) + eolStr;
540 let
final:
string = keyLine;
541 for (let i = 0; i < tagDefinition.length; i++) {
542 final += comment + tagDefinition[i] + eolStr;
544 final += comment + this.Config.get(
"telegraphBlockStop") + eolStr;
545 if (this.addBlankLineAfterMultiline) {
546 final += comment + eolStr;
561 private addSingleLineKey(comment:
string, eol:
vscode.EndOfLine, tagName:
string, tagDefinition:
string):
string {
562 logger.debug(
getMessage(
"inFunction",
"addSingleLineKey",
"CommentGenerator"));
563 let
final:
string = comment + tagName + this.addKeyDefinitionSeparator();
564 final += tagDefinition + this.determineNewLine(eol);
577 private beforeHeaderCloser(comment:
string, eol:
vscode.EndOfLine):
string {
578 logger.debug(
getMessage(
"inFunction",
"beforeHeaderCloser",
"CommentGenerator"));
579 return comment + this.Config.get(
"telegraphEndOfTransmission") + this.determineNewLine(eol);
592 private headerCloser(comment:
string, eol:
vscode.EndOfLine, projectName:
string =
this.Config.get(
"extensionName")):
string {
594 let
final:
string = comment + this.Config.get(
"headerOpenerDecorationOpen");
595 final += this.Config.get(
"telegraphEnd") +
" ";
596 final += projectName;
597 final += this.Config.get(
"headerOpenerDecorationClose");
598 final += this.determineNewLine(eol);
610 private updateFileInfo(document:
vscode.TextDocument) {
611 logger.debug(
getMessage(
"inFunction",
"updateFileInfo",
"CommentGenerator"));
612 this.headerInnerEnd = undefined;
613 this.headerInnerStart = undefined;
614 this.documentBody = document;
616 this.headerLogo = this.Config.get(
"headerLogo");
622 this.singleLineOverride = this.Config.get(
"languageSingleLineComment");
623 this.multiLineOverride = this.Config.get(
"languageMultiLineComment");
624 this.trimTrailingSpaces = this.Config.get(
"removeTrailingHeaderSpaces");
626 if (this.Config.get(
"useWorkspaceNameWhenAvailable")) {
627 this.projectName = this.Config.get(
"workspaceName") || this.Config.get(
"extensionName");
629 this.projectName = this.Config.get(
"extensionName");
631 this.filePath = this.documentBody.uri.fsPath;
632 this.projectCopyRight = this.Config.get(
"projectCopyright");
633 this.addBlankLineAfterMultiline = this.Config.get(
"headerAddBlankLineAfterMultiline");
635 const baseScanLength: number = this.Config.get(
"maxScanLength");
636 this.maxScanLength = baseScanLength;
646 this.maxScanLength += this.headerLogo.length;
648 this.fileName = this.documentBody.uri.path.split(
'/').pop() ||
"unknown";
649 if (this.fileName.includes(
'.')) {
650 this.fileExtension = this.fileName.split(
'.').pop() ||
"none";
652 this.fileExtension =
"none";
654 this.languageId = this.documentBody.languageId;
655 this.documentEOL = this.documentBody.eol;
656 this.documentVersion = this.documentBody.version;
675 private prependIfPresent(buildHeader:
string[], eol:
vscode.EndOfLine, languageId?:
string):
string[] {
676 if (languageId === undefined) {
681 let instanceCleaned:
string =
instance;
683 instanceCleaned =
instance.join(this.determineNewLine(eol));
685 buildHeader.push(instanceCleaned);
686 logger.debug(
getMessage(
"languagePrependApplied", languageId, instanceCleaned));
708 private appendIfPresent(buildHeader:
string[], eol:
vscode.EndOfLine, languageId?:
string):
string[] {
709 if (languageId === undefined) {
714 let instanceCleaned:
string =
instance;
716 instanceCleaned =
instance.join(this.determineNewLine(eol));
718 buildHeader.push(instanceCleaned);
719 logger.debug(
getMessage(
"languageAppendApplied", languageId, instanceCleaned));
748 if (!determinedComment.language) {
749 return determinedComment;
752 const languageId = determinedComment.language;
755 const singleOverride = this.singleLineOverride[languageId];
756 if (singleOverride !== undefined) {
758 if (Array.isArray(singleOverride)) {
759 determinedComment.singleLine = singleOverride;
761 determinedComment.singleLine = [singleOverride];
763 logger.debug(
getMessage(
"singleLineCommentOverrideApplied", languageId, determinedComment.singleLine));
767 const multiOverride = this.multiLineOverride[languageId];
768 if (multiOverride !== undefined) {
770 determinedComment.multiLine = multiOverride;
771 logger.debug(
getMessage(
"multiLineCommentOverrideApplied", languageId, determinedComment.multiLine));
774 return determinedComment;
785 private async getCorrectCommentPrefix(determinedComment:
CommentStyle): Promise<
string[]> {
786 logger.debug(
getMessage(
"inFunction",
"getCorrectPrefix",
"CommentGenerator"));
787 let commentOpener:
string =
"";
788 let commentMiddle:
string =
"";
789 let commentCloser:
string =
"";
790 const determinedComment_checked:
CommentStyle = this.getOverrideIfPresent(determinedComment);
791 if (determinedComment_checked.multiLine.length >= 2 &&
this.preferSingleLineComments ===
false) {
792 commentOpener = determinedComment_checked.multiLine[0];
793 if (determinedComment_checked.multiLine.length >= 3) {
794 commentMiddle = determinedComment_checked.multiLine[1];
795 commentCloser = determinedComment_checked.multiLine[2];
798 commentCloser = determinedComment_checked.multiLine[1];
800 }
else if (determinedComment_checked.singleLine.length > 0) {
801 if (determinedComment_checked.prompt_comment_opening_type) {
803 const commentString:
string = await this.getSingleCommentOption(determinedComment_checked.singleLine);
804 commentOpener = commentString;
805 commentMiddle = commentString;
806 commentCloser = commentString;
808 commentOpener = determinedComment_checked.singleLine[0];
809 commentMiddle = determinedComment_checked.singleLine[0];
810 commentCloser = determinedComment_checked.singleLine[0];
817 commentOpener += this.Config.get(
"headerCommentSpacing");
818 commentMiddle += this.Config.get(
"headerCommentSpacing");
819 commentCloser += this.Config.get(
"headerCommentSpacing");
821 return [commentOpener, commentMiddle, commentCloser];
839 private async buildTheHeader(comments:
string[], languageId?:
string): Promise<
string[]> {
840 logger.debug(
getMessage(
"inFunction",
"buildTheHeader",
"CommentGenerator"));
841 const eol:
vscode.EndOfLine = this.documentEOL ||
vscode.EndOfLine.LF;
842 const unknownTerm:
string =
getMessage(
"unknown");
843 const commentOpener:
string = comments[0] ||
"";
844 const commentMiddle:
string = comments[1] ||
"";
845 const commentCloser:
string = comments[2] ||
"";
846 let buildHeader:
string[] = [];
848 buildHeader = this.prependIfPresent(buildHeader, eol, languageId);
850 if (commentOpener.length > 0) {
851 buildHeader.push(`${this.mySmartTrimmer(commentOpener)}${this.determineNewLine(eol)}`);
854 buildHeader.push(this.headerOpener(commentMiddle, eol, this.projectName));
856 const freshLogo:
string[] = this.Config.get(
"headerLogo");
857 const freshVersions: Record<string, string[]> = this.Config.get(
"headerLogoVersions");
858 const freshUseVersion:
boolean = this.Config.get(
"useHeaderLogoVersion");
859 const freshRef:
string = this.Config.get(
"headerLogoVersionReference");
861 this.headerLogo = freshLogo;
862 this.headerLogoVersions = freshVersions;
865 let logoContent = freshLogo;
866 if (this.Config.get(
"randomLogo") ===
true) {
868 const gatheredLogo:
logo = await this.
randomLogo.getRandomLogoFromFolder();
869 if (gatheredLogo.logoContent !== undefined) {
870 logoContent = gatheredLogo.logoContent;
877 }
else if (freshUseVersion ===
true) {
878 if (freshRef in freshVersions) {
880 logoContent = freshVersions[freshRef];
886 buildHeader.push(this.addMultilineKey(commentMiddle, eol, this.Config.get(
"headerLogoKey"), logoContent));
888 buildHeader.push(this.addSingleLineKey(commentMiddle, eol, this.Config.get(
"headerProjectKey"),
this.projectName));
890 buildHeader.push(this.addSingleLineKey(commentMiddle, eol, this.Config.get(
"headerFileKey"),
this.fileName || unknownTerm));
892 buildHeader.push(this.addCreationDate(commentMiddle, eol));
894 buildHeader.push(this.addLastModifiedDate(commentMiddle, eol));
896 buildHeader.push(this.addMultilineKey(commentMiddle, eol, this.Config.get(
"headerDescriptionKey"), await
this.determineHeaderDescription()));
898 buildHeader.push(this.addSingleLineKey(commentMiddle, eol, this.Config.get(
"headerCopyrightKey"),
this.projectCopyRight));
902 buildHeader.push(this.addSingleLineKey(commentMiddle, eol, this.Config.get(
"headerPurposeKey"), (await
this.determineHeaderPurpose()).join(
";")));
904 buildHeader.push(this.beforeHeaderCloser(commentMiddle, eol));
906 buildHeader.push(this.headerCloser(commentMiddle, eol, this.projectName));
907 if (commentCloser.length > 0) {
908 buildHeader.push(`${commentCloser}${this.determineNewLine(eol)}`);
911 buildHeader = this.appendIfPresent(buildHeader, eol, languageId);
924 private async updateEditDate(document:
vscode.TextDocument, comments:
string[]) {
925 logger.debug(
getMessage(
"inFunction",
"updateEditDate",
"CommentGenerator"));
926 const commentOpener:
string = comments[0] ||
"";
927 const commentMiddle:
string = comments[1] ||
"";
928 const commentCloser:
string = comments[2] ||
"";
929 if (this.headerInnerStart === undefined || this.headerInnerEnd === undefined) {
930 const errMsg:
string =
getMessage(
"updateEditDateMissingBounds");
935 if (!this.documentBody) {
936 const errMsg:
string =
getMessage(
"emptyDocument");
942 const eol = this.documentEOL ||
vscode.EndOfLine.LF;
943 const lastModifiedKey = this.Config.get(
"headerLastModifiedKey");
946 const newLine = this.addLastModifiedDate(commentMiddle, eol).trimEnd();
948 let targetLine: number | undefined = undefined;
951 for (let i = this.headerInnerStart; i <= this.headerInnerEnd; i++) {
952 const lineText = this.documentBody.lineAt(i).text;
953 if (lineText.includes(lastModifiedKey)) {
959 if (targetLine === undefined) {
960 const errMsg:
string =
getMessage(
"lastModifiedLineNotFound");
966 const edit =
new vscode.WorkspaceEdit();
967 const range = document.lineAt(targetLine).range;
968 edit.replace(document.uri, range, newLine);
969 await
vscode.workspace.applyEdit(edit);
971 const msg:
string =
getMessage(
"lastModifiedUpdated");
985 protected locateIfHeaderPresent(comments:
string[]): boolean | undefined {
986 logger.debug(
getMessage(
"inFunction",
"locateIfHeaderPresent",
"CommentGenerator"));
987 const commentOpener:
string = comments[0] ||
"";
988 const commentMiddle:
string = comments[1] ||
"";
989 const commentCloser:
string = comments[2] ||
"";
990 this.headerInnerStart = undefined;
991 this.headerInnerEnd = undefined;
992 if (this.documentBody === undefined) {
996 if (this.documentBody.isClosed) {
997 logger.warning(getMessage(
"closedDocument"));
1000 const documentTotalLines: number =
this.documentBody.lineCount;
1001 const eol:
vscode.EndOfLine =
this.documentEOL ??
vscode.EndOfLine.LF;
1002 const opener:
string =
this.headerOpener(commentMiddle, eol,
this.projectName).trimEnd();
1003 const closer:
string =
this.headerCloser(commentMiddle, eol,
this.projectName).trimEnd();
1004 const scanLines: number = Math.min(
this.maxScanLength, documentTotalLines);
1005 const graceLines: number = Math.min((
this.maxScanLength * 2), documentTotalLines);
1006 let lineOpenerFound:
boolean =
false;
1007 let lineCloserFound:
boolean =
false;
1008 for (let i = 0; i < scanLines || (i < graceLines && lineOpenerFound && !lineCloserFound); i++) {
1009 const lineText = this.documentBody.lineAt(i).text;
1010 if (i >= scanLines) {
1015 if (lineText === closer && !lineOpenerFound) {
1021 if (lineText === opener && lineCloserFound) {
1027 if (lineText === opener && !lineOpenerFound) {
1028 lineOpenerFound =
true;
1029 this.headerInnerStart = i;
1035 if (lineText === closer && !lineCloserFound) {
1036 this.headerInnerEnd = i;
1037 lineCloserFound =
true;
1040 if (lineCloserFound && lineOpenerFound) {
1045 logger.Gui.warning(
getMessage(
"documentLineScanExceeded", this.maxScanLength));
1064 private skipFirstLineInDocument(document:
vscode.TextDocument): number {
1067 if (document.lineCount > 0) {
1068 const firstLine = document.lineAt(0).text;
1069 if (firstLine.startsWith(
"#!")) {
1085 private async writeHeaderToFile(document:
vscode.TextDocument, comments:
string[], languageId?:
string): Promise<number> {
1086 logger.debug(
getMessage(
"inFunction",
"writeHeaderToFile",
"CommentGenerator"));
1088 const headerLines = await this.buildTheHeader(comments, languageId);
1089 const headerText = headerLines.join(
"");
1090 const edit =
new vscode.WorkspaceEdit();
1091 const insertLine: number = this.skipFirstLineInDocument(document);
1094 new vscode.Position(insertLine, 0),
1098 await
vscode.workspace.applyEdit(edit);
1099 return this.Config.get(
"statusSuccess");
1113 async injectHeader() {
1114 logger.debug(
getMessage(
"inFunction",
"injectHeader",
"CommentGenerator"));
1115 const editor =
vscode.window.activeTextEditor;
1116 if (editor === undefined) {
1121 this.updateFileInfo(editor.document);
1124 this.documentBody === undefined || this.filePath === undefined
1125 || this.fileName === undefined || this.fileExtension === undefined
1126 || this.languageId === undefined || this.documentEOL === undefined
1127 || this.documentVersion === undefined
1134 if (this.documentBody.isClosed) {
1136 logger.Gui.warning(
getMessage(
"updateAbortedBecauseFileClosedSyncCancelled"));
1140 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));
1144 const determineComment:
CommentStyle = await this.determineCorrectComment();
1145 const comments:
string[] = await this.getCorrectCommentPrefix(determineComment);
1147 let response:
boolean | undefined = this.locateIfHeaderPresent(comments);
1148 if (response === undefined) {
1149 logger.Gui.warning(
getMessage(
"updateAbortedBecauseFileClosedSyncCancelled"));
1152 if (response ===
true) {
1154 await this.updateEditDate(editor.document, comments);
1157 if (response ===
false) {
1158 let status: number = await this.writeHeaderToFile(editor.document, comments, determineComment.language);
1159 if (status === this.Config.get(
"statusError")) {
1175 private async allowedToActivate(): Promise<boolean> {
1176 logger.debug(
getMessage(
"inFunction",
"allowedToActivate",
"CommentGenerator"));
1177 const ignored:
string[] =
CodeConfig.get(
"extensionIgnore") ?? [];
1179 for (
const pattern of ignored) {
1181 this.fileExtension && minimatch(this.fileExtension, pattern) ||
1182 this.fileName && minimatch(this.fileName, pattern) ||
1183 this.filePath && minimatch(this.filePath, pattern)
1200 updateLogoInstanceRandomiser(randomLogoInstance: RandomLogo): void {
1201 logger.debug(
getMessage(
"inFunction",
"updateLogoInstanceRandomiser",
"CommentGenerator"));
1215 async refreshHeader(document:
vscode.TextDocument | undefined) {
1216 logger.debug(
getMessage(
"inFunction",
"refreshHeader",
"CommentGenerator"));
1222 if (document === undefined) {
1226 this.updateFileInfo(document);
1229 this.documentBody === undefined || this.filePath === undefined
1230 || this.fileName === undefined || this.fileExtension === undefined
1231 || this.languageId === undefined || this.documentEOL === undefined
1232 || this.documentVersion === undefined
1239 if (!await this.allowedToActivate()) {
1244 if (this.documentBody.isClosed) {
1246 logger.Gui.warning(
getMessage(
"updateAbortedBecauseFileClosedSyncCancelled"));
1250 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));
1254 const determineComment:
CommentStyle = await this.determineCorrectComment();
1255 const comments:
string[] = await this.getCorrectCommentPrefix(determineComment);
1257 const response:
boolean | undefined = this.locateIfHeaderPresent(comments);
1258 if (response === undefined) {
1259 logger.Gui.warning(
getMessage(
"updateAbortedBecauseFileClosedSyncCancelled"));
1262 if (response ===
false) {
1268 const questionResponse:
boolean = await
query.confirm(
getMessage(
"headerInjectQuestion"));
1269 if (questionResponse ===
false) {
1273 const status: number = await this.writeHeaderToFile(document, comments, determineComment.language);
1274 if (status === this.Config.get(
"statusError")) {
1280 if (response ===
true) {
1282 await this.updateEditDate(document, comments);