Пример #1
0
        /// <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");
            }
        }
Пример #2
0
        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;
            }
        }
Пример #4
0
        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);
        }
Пример #7
0
        private int GetHeaderLength(TextDocument textDocument, bool skipUsings)
        {
            var headerBlock = ReadTextBlock(textDocument);
            var language    = textDocument.GetCodeLanguage();

            return(FileHeaderHelper.GetHeaderLength(language, headerBlock, skipUsings));
        }
Пример #8
0
        private int GetNbLinesToSkip(TextDocument textDocument)
        {
            var docHeadBlock = ReadTextBlock(textDocument);

            return(FileHeaderHelper.GetNbLinesToSkip("using ", docHeadBlock, new List <string> {
                "namespace ", "[assembly:"
            }));
        }
Пример #9
0
        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}");
        }
Пример #10
0
        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);
        }
Пример #11
0
        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");
            }
        }
Пример #12
0
        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");
            }
        }
Пример #13
0
        /// <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;
            }
        }
Пример #14
0
        public void GetHeaderLengthMultiSingleLineWithEmptyLinesSkipUsings(string tag, string text, int expectedLength)
        {
            var headerLength = FileHeaderHelper.GetHeaderLength(text, tag, true);

            Assert.IsTrue(headerLength == expectedLength, $"Expecting {expectedLength}, found {headerLength}");
        }
Пример #15
0
        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);
        }
Пример #17
0
        public void GetHeaderLengthLanguage(CodeLanguage language, string text)
        {
            var headerLength = FileHeaderHelper.GetHeaderLength(language, text);

            Assert.IsTrue(headerLength > 0, $"Expecting value > 0, found {headerLength}");
        }
Пример #18
0
        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);
        }
Пример #20
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);
        }