From c2536374460624407e645b2bd3f0062f690b555c Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 17 Nov 2010 06:14:40 +0100 Subject: [PATCH] removed code duplication in StripComments/TrimComments --- .../VBNetFormattingStrategy.cs | 13 +++------ .../VBNetBinding/Project/Src/LanguageUtils.cs | 27 +++++++++++++++++++ .../VBNetBinding/Project/Src/Parser/Parser.cs | 16 +---------- .../VBNetBinding/Project/VBNetBinding.csproj | 1 + 4 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 src/AddIns/BackendBindings/VBNetBinding/Project/Src/LanguageUtils.cs diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs index 0fbb8e6226..208ed22cb3 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs @@ -481,7 +481,7 @@ namespace ICSharpCode.VBNetBinding string text = lineSeg.Text; - if (StripComment(text).Trim(' ', '\t', '\r', '\n').EndsWith("_", StringComparison.OrdinalIgnoreCase)) + if (text.TrimComments().Trim(' ', '\t', '\r', '\n').EndsWith("_", StringComparison.OrdinalIgnoreCase)) return true; else return false; @@ -515,11 +515,6 @@ namespace ICSharpCode.VBNetBinding return empty && match; } - static string StripComment(string text) - { - return Regex.Replace(text, "'.*$", "", RegexOptions.Singleline).Trim(); - } - static bool IsInsideDocumentationComment(ITextEditor editor, IDocumentLine curLine, int cursorOffset) { for (int i = curLine.Offset; i < cursorOffset; ++i) { @@ -623,10 +618,10 @@ namespace ICSharpCode.VBNetBinding static int GetLastVisualLine(int line, ITextEditor area) { - string text = StripComment(area.Document.GetLine(line).Text); + string text = area.Document.GetLine(line).Text.TrimComments(); while (text.EndsWith("_", StringComparison.Ordinal)) { line++; - text = StripComment(area.Document.GetLine(line).Text); + text = area.Document.GetLine(line).Text.TrimComments(); } return line; } @@ -754,7 +749,7 @@ namespace ICSharpCode.VBNetBinding for (int i = begin; i <= end; i++) { IDocumentLine curLine = editor.Document.GetLine(i); string lineText = curLine.Text.Trim(' ', '\t', '\r', '\n'); - string noComments = StripComment(lineText).TrimEnd(' ', '\t', '\r', '\n'); + string noComments = lineText.TrimComments().TrimEnd(' ', '\t', '\r', '\n'); if (i < selBegin || i > selEnd) { indentation.PopOrDefault(); diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/LanguageUtils.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/LanguageUtils.cs new file mode 100644 index 0000000000..9a71e49a1a --- /dev/null +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/LanguageUtils.cs @@ -0,0 +1,27 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace ICSharpCode.VBNetBinding +{ + public static class LanguageUtils + { + public static string TrimComments(this string argument) + { + if (string.IsNullOrEmpty(argument)) + return string.Empty; + + bool inStr = false; + + for (int i = 0; i < argument.Length; i++) { + if (argument[i] == '"') + inStr = !inStr; + if (argument[i] == '\'' && !inStr) + return argument.Substring(0, i).Trim(); + } + + return argument; + } + } +} diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/Parser.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/Parser.cs index 6903e97722..4e8f3c70ff 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/Parser.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Parser/Parser.cs @@ -56,25 +56,11 @@ namespace ICSharpCode.VBNetBinding && directive.Arg.StartsWith("region", StringComparison.OrdinalIgnoreCase) && regionStartDirectives.Any()) { ICSharpCode.NRefactory.PreprocessingDirective start = regionStartDirectives.Pop(); - cu.FoldingRegions.Add(new FoldingRegion(TrimComment(start.Arg).Trim('"'), DomRegion.FromLocation(start.StartPosition, directive.EndPosition))); + cu.FoldingRegions.Add(new FoldingRegion(start.Arg.TrimComments().Trim('"'), DomRegion.FromLocation(start.StartPosition, directive.EndPosition))); } } } - static string TrimComment(string argument) - { - bool inStr = false; - - for (int i = 0; i < argument.Length; i++) { - if (argument[i] == '"') - inStr = !inStr; - if (argument[i] == '\'' && !inStr) - return argument.Substring(0, i).Trim(); - } - - return argument; - } - public ICompilationUnit Parse(IProjectContent projectContent, string fileName, ICSharpCode.SharpDevelop.ITextBuffer fileContent) { using (ICSharpCode.NRefactory.IParser p = ICSharpCode.NRefactory.ParserFactory.CreateParser(ICSharpCode.NRefactory.SupportedLanguage.VBNet, fileContent.CreateReader())) { diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj b/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj index 4f73f22bb4..2e42256570 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj @@ -68,6 +68,7 @@ + ProjectImportsOptions.xaml Code