/// <summary> /// Updates the file header for the specified text document. /// </summary> /// <param name="textDocument">The text document to update.</param> internal void UpdateFileHeader(TextDocument textDocument) { var settingsFileHeader = FileHeaderHelper.GetFileHeaderFromSettings(textDocument); if (string.IsNullOrWhiteSpace(settingsFileHeader)) { return; } if (!settingsFileHeader.EndsWith(Environment.NewLine)) { settingsFileHeader += Environment.NewLine; } switch ((HeaderUpdateMode)Settings.Default.Cleaning_UpdateFileHeader_HeaderUpdateMode) { case HeaderUpdateMode.Insert: InsertFileHeader(textDocument, settingsFileHeader); break; case HeaderUpdateMode.Replace: ReplaceFileHeader(textDocument, settingsFileHeader); break; default: throw new InvalidEnumArgumentException("Invalid file header update mode retrieved from settings"); } }
private async Task <SyntaxNode> GetTransformedSyntaxRootAsync(Document document, CancellationToken cancellationToken) { var tree = await document.GetRequiredSyntaxTreeAsync(cancellationToken).ConfigureAwait(false); var root = await tree.GetRootAsync(cancellationToken).ConfigureAwait(false); if (!document.Project.AnalyzerOptions.TryGetEditorConfigOption(CodeStyleOptions2.FileHeaderTemplate, tree, out string fileHeaderTemplate) || string.IsNullOrEmpty(fileHeaderTemplate)) { // This exception would show up as a gold bar, but as indicated we do not believe this is reachable. throw ExceptionUtilities.Unreachable; } var expectedFileHeader = fileHeaderTemplate.Replace("{fileName}", Path.GetFileName(document.FilePath)); var fileHeader = FileHeaderHelper.ParseFileHeader(root); SyntaxNode newSyntaxRoot; if (fileHeader.IsMissing) { newSyntaxRoot = AddHeader(document, root, expectedFileHeader); } else { newSyntaxRoot = ReplaceHeader(document, root, expectedFileHeader); } return(newSyntaxRoot); }
private void HandleSyntaxTree(SyntaxTreeAnalysisContext context) { var tree = context.Tree; var root = tree.GetRoot(context.CancellationToken); // don't process empty files if (root.FullSpan.IsEmpty) { return; } if (!context.Options.TryGetEditorConfigOption(CodeStyleOptions.FileHeaderTemplate, tree, out string fileHeaderTemplate) || string.IsNullOrEmpty(fileHeaderTemplate)) { return; } var fileHeader = FileHeaderHelper.ParseFileHeader(root); if (fileHeader.IsMissing) { context.ReportDiagnostic(Diagnostic.Create(MissingHeaderDescriptor, fileHeader.GetLocation(tree))); return; } var expectedFileHeader = fileHeaderTemplate.Replace("{fileName}", Path.GetFileName(tree.FilePath)); if (!CompareCopyrightText(expectedFileHeader, fileHeader.CopyrightText)) { context.ReportDiagnostic(Diagnostic.Create(InvalidHeaderDescriptor, fileHeader.GetLocation(tree))); return; } }
public void GetHeaderLengthMultiLine(string text, string tagStart, string tagEnd) { var headerLength = FileHeaderHelper.GetHeaderLength(text, tagStart, tagEnd, false); var expectedLength = text.Length - Regex.Matches(text, Environment.NewLine).Count + 1; Assert.IsTrue(headerLength == expectedLength, $"Expecting {expectedLength}, found {headerLength}"); }
public void GetHeaderLengthMultiLineWithEmptyLines(string docStart, string tagStart, string tagEnd) { var headerLength = FileHeaderHelper.GetHeaderLength(docStart, tagStart, tagEnd); var value = docStart.Length - Regex.Matches(docStart, Environment.NewLine).Count; Assert.IsTrue(headerLength == value); }
public void GetHeaderLengthMultiLine(string docStart, string tagStart, string beaconEnd) { var headerLength = FileHeaderHelper.GetHeaderLength(docStart, tagStart, beaconEnd); var length = docStart.Length - Regex.Matches(docStart, Environment.NewLine).Count; Assert.IsTrue(headerLength == length); }
private int GetHeaderLength(TextDocument textDocument, bool skipUsings) { var headerBlock = ReadTextBlock(textDocument); var language = textDocument.GetCodeLanguage(); return(FileHeaderHelper.GetHeaderLength(language, headerBlock, skipUsings)); }
private int GetNbLinesToSkip(TextDocument textDocument) { var docHeadBlock = ReadTextBlock(textDocument); return(FileHeaderHelper.GetNbLinesToSkip("using ", docHeadBlock, new List <string> { "namespace ", "[assembly:" })); }
public void GetNbLinesToSkip(string patternToFind, string text, string limit, int expectedNbLines) { var nbLines = FileHeaderHelper.GetNbLinesToSkip(patternToFind, text, new List <string>() { limit }); Assert.IsTrue(nbLines == expectedNbLines, $"Expecting {expectedNbLines}, found {expectedNbLines}"); }
private void ReplaceFileHeader(TextDocument textDocument, string settingsFileHeader) { var headerBlock = ReadHeaderBlock(textDocument); var currentHeaderLength = FileHeaderHelper.GetHeaderLength(textDocument.GetCodeLanguage(), headerBlock); var currentHeader = headerBlock.Substring(0, currentHeaderLength + 1) + Environment.NewLine; var newHeader = settingsFileHeader + Environment.NewLine; if (string.Equals(currentHeader, newHeader)) { return; } var docStart = textDocument.StartPoint.CreateEditPoint(); docStart.ReplaceText(currentHeaderLength, newHeader, (int)vsEPReplaceTextOptions.vsEPReplaceTextKeepMarkers); }
private void InsertFileHeader(TextDocument textDocument, string settingsFileHeader) { switch (FileHeaderHelper.GetFileHeaderPositionFromSettings(textDocument)) { case HeaderPosition.DocumentStart: InsertFileHeaderDocumentStart(textDocument, settingsFileHeader); return; case HeaderPosition.AfterUsings: InsertFileHeaderAfterUsings(textDocument, settingsFileHeader); return; default: throw new InvalidEnumArgumentException("Invalid file header position retrieved from settings"); } }
private void ReplaceFileHeader(TextDocument textDocument, string settingsFileHeader) { switch (FileHeaderHelper.GetFileHeaderPositionFromSettings(textDocument)) { case HeaderPosition.DocumentStart: ReplaceFileHeaderAfterUsings(textDocument, string.Empty); // Removes header after usings if present ReplaceFileHeaderDocumentStart(textDocument, settingsFileHeader); return; case HeaderPosition.AfterUsings: ReplaceFileHeaderDocumentStart(textDocument, string.Empty); // Removes header at document start if present ReplaceFileHeaderAfterUsings(textDocument, settingsFileHeader); return; default: throw new InvalidEnumArgumentException("Invalid file header position retrieved from settings"); } }
/// <summary> /// Updates the file header for the specified text document. /// </summary> /// <param name="textDocument">The text document to update.</param> internal void UpdateFileHeader(TextDocument textDocument) { var settingsFileHeader = FileHeaderHelper.GetFileHeaderFromSettings(textDocument); if (string.IsNullOrWhiteSpace(settingsFileHeader)) { return; } switch ((HeaderUpdateMode)Settings.Default.Cleaning_UpdateFileHeader_HeaderUpdateMode) { case HeaderUpdateMode.Insert: InsertFileHeader(textDocument, settingsFileHeader); break; case HeaderUpdateMode.Replace: ReplaceFileHeader(textDocument, settingsFileHeader); break; } }
public void GetHeaderLengthMultiSingleLineWithEmptyLinesSkipUsings(string tag, string text, int expectedLength) { var headerLength = FileHeaderHelper.GetHeaderLength(text, tag, true); Assert.IsTrue(headerLength == expectedLength, $"Expecting {expectedLength}, found {headerLength}"); }
public void GetHeaderLengthMultiLineZeroSkipUsings(string text, string tagStart, string tagEnd) { var headerLength = FileHeaderHelper.GetHeaderLength(text, tagStart, tagEnd, true); Assert.IsTrue(headerLength == 0, $"Expecting 0, found {headerLength}"); }
public void GetHeaderLengthLanguageWithWrongTags(CodeLanguage language, string docStart) { var headerLength = FileHeaderHelper.GetHeaderLength(language, docStart); Assert.IsTrue(headerLength == 0); }
public void GetHeaderLengthLanguage(CodeLanguage language, string text) { var headerLength = FileHeaderHelper.GetHeaderLength(language, text); Assert.IsTrue(headerLength > 0, $"Expecting value > 0, found {headerLength}"); }
public void GetHeaderLengthLanguageWithWrongTags(CodeLanguage language, string text) { var headerLength = FileHeaderHelper.GetHeaderLength(language, text); Assert.IsTrue(headerLength == 0, $"Expecting 0, found {headerLength}"); }
public void GetHeaderLengthMultiLineZero(string docStart, string tagStart, string tagEnd) { var headerLength = FileHeaderHelper.GetHeaderLength(docStart, tagStart, tagEnd); Assert.IsTrue(headerLength == 0); }
public void GetHeaderLengthMultiLineSkipUsings(string text, string tagStart, string tagEnd, int expectedLength) { var headerLength = FileHeaderHelper.GetHeaderLength(text, tagStart, tagEnd, true); Assert.IsTrue(headerLength == expectedLength, $"Expecting {expectedLength}, found {headerLength}"); }
public void GetHeaderLengthMultiSingleLineWithEmptyLines(string tag, string docStart, int expectedLength) { var headerLength = FileHeaderHelper.GetHeaderLength(docStart, tag); Assert.IsTrue(headerLength == expectedLength); }