Skip to content

Commit a2cbae3

Browse files
authored
Merge pull request #2558 from comintern/next
Remove CommentNode from inspections, fixed bug in Rem quick-fix
2 parents c58f68d + 1744556 commit a2cbae3

File tree

5 files changed

+94
-18
lines changed

5 files changed

+94
-18
lines changed

RetailCoder.VBE/Inspections/Abstract/InspectionResultBase.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,29 @@ protected InspectionResultBase(IInspection inspection, Declaration target)
2121
/// <summary>
2222
/// Creates a comment inspection result.
2323
/// </summary>
24-
protected InspectionResultBase(IInspection inspection, CommentNode comment)
25-
: this(inspection, comment.QualifiedSelection.QualifiedName, null, comment)
24+
protected InspectionResultBase(IInspection inspection, QualifiedModuleName qualifiedName)
25+
: this(inspection, qualifiedName, null)
2626
{ }
2727

2828
/// <summary>
2929
/// Creates an inspection result.
3030
/// </summary>
31-
protected InspectionResultBase(IInspection inspection, QualifiedModuleName qualifiedName, ParserRuleContext context, CommentNode comment = null)
31+
protected InspectionResultBase(IInspection inspection, QualifiedModuleName qualifiedName, ParserRuleContext context)
3232
{
3333
_inspection = inspection;
3434
_qualifiedName = qualifiedName;
3535
_context = context;
36-
_comment = comment;
3736
}
3837

3938
/// <summary>
4039
/// Creates an inspection result.
4140
/// </summary>
42-
protected InspectionResultBase(IInspection inspection, QualifiedModuleName qualifiedName, ParserRuleContext context, Declaration declaration, CommentNode comment = null)
41+
protected InspectionResultBase(IInspection inspection, QualifiedModuleName qualifiedName, ParserRuleContext context, Declaration declaration)
4342
{
4443
_inspection = inspection;
4544
_qualifiedName = qualifiedName;
4645
_context = context;
4746
_target = declaration;
48-
_comment = comment;
4947
}
5048

5149
private readonly IInspection _inspection;
@@ -59,9 +57,6 @@ protected InspectionResultBase(IInspection inspection, QualifiedModuleName quali
5957
private readonly ParserRuleContext _context;
6058
public ParserRuleContext Context { get { return _context; } }
6159

62-
private readonly CommentNode _comment;
63-
public CommentNode Comment { get { return _comment; } }
64-
6560
private readonly Declaration _target;
6661
public Declaration Target { get { return _target; } }
6762

@@ -72,12 +67,8 @@ public virtual QualifiedSelection QualifiedSelection
7267
{
7368
get
7469
{
75-
if (_context == null && _comment == null)
76-
{
77-
return _target.QualifiedSelection;
78-
}
7970
return _context == null
80-
? _comment.QualifiedSelection
71+
? _target.QualifiedSelection
8172
: new QualifiedSelection(_qualifiedName, _context.GetSelection());
8273
}
8374
}

RetailCoder.VBE/Inspections/OptionExplicitInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
3939
.Where(declaration => ModuleTypes.Contains(declaration.DeclarationType));
4040

4141
var issues = modules.Where(module => !options.Select(option => option.Scope).Contains(module.Scope))
42-
.Select(issue => new OptionExplicitInspectionResult(this, issue.QualifiedName.QualifiedModuleName));
42+
.Select(issue => new OptionExplicitInspectionResult(this, issue));
4343

4444
return issues;
4545
}

RetailCoder.VBE/Inspections/QuickFixes/ReplaceObsoleteCommentMarkerQuickFix.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ public override void Fix()
2828
var newComment = commentLine.Substring(0, Context.Start.Column) +
2929
Tokens.CommentMarker +
3030
comment.Substring(Tokens.Rem.Length, comment.Length - Tokens.Rem.Length);
31-
31+
32+
var lines = Selection.Selection.LineCount;
33+
if (lines > 1)
34+
{
35+
module.DeleteLines(start + 1, lines - 1);
36+
}
3237
module.ReplaceLine(start, newComment);
3338
}
3439
}

RetailCoder.VBE/Inspections/Results/OptionExplicitInspectionResult.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class OptionExplicitInspectionResult : InspectionResultBase
1212
{
1313
private IEnumerable<QuickFixBase> _quickFixes;
1414

15-
public OptionExplicitInspectionResult(IInspection inspection, QualifiedModuleName qualifiedName)
16-
: base(inspection, new CommentNode(string.Empty, Tokens.CommentMarker, new QualifiedSelection(qualifiedName, Selection.Home)))
15+
public OptionExplicitInspectionResult(IInspection inspection, Declaration target)
16+
: base(inspection, target)
1717
{ }
1818

1919
public override IEnumerable<QuickFixBase> QuickFixes

RubberduckTests/Inspections/ObsoleteCommentSyntaxInspectionTests.cs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,46 @@ public void ObsoleteCommentSyntax_QuickFixWorks_UpdateComment()
241241
Assert.AreEqual(expectedCode, actualCode);
242242
}
243243

244+
[TestMethod]
245+
[TestCategory("Inspections")]
246+
public void ObsoleteCommentSyntax_QuickFixWorks_UpdateCommentHasContinuation()
247+
{
248+
const string inputCode =
249+
@"Rem this is _
250+
a comment";
251+
252+
const string expectedCode =
253+
@"' this is _
254+
a comment";
255+
256+
//Arrange
257+
var settings = new Mock<IGeneralConfigService>();
258+
var config = GetTestConfig();
259+
settings.Setup(x => x.LoadConfiguration()).Returns(config);
260+
261+
var builder = new MockVbeBuilder();
262+
IVBComponent component;
263+
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
264+
var project = vbe.Object.VBProjects[0];
265+
var module = project.VBComponents[0].CodeModule;
266+
var mockHost = new Mock<IHostApplication>();
267+
mockHost.SetupAllProperties();
268+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock<ISinks>().Object));
269+
270+
parser.Parse(new CancellationTokenSource());
271+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
272+
273+
var inspection = new ObsoleteCommentSyntaxInspection(parser.State);
274+
var inspector = new Inspector(settings.Object, new IInspection[] { inspection });
275+
276+
var inspectionResults = inspector.FindIssuesAsync(parser.State, CancellationToken.None).Result;
277+
278+
inspectionResults.First().QuickFixes.Single(s => s is ReplaceObsoleteCommentMarkerQuickFix).Fix();
279+
280+
var actualCode = module.Content();
281+
Assert.AreEqual(expectedCode, actualCode);
282+
}
283+
244284
[TestMethod]
245285
[TestCategory("Inspections")]
246286
public void ObsoleteCommentSyntax_QuickFixWorks_RemoveComment()
@@ -354,6 +394,46 @@ public void ObsoleteCommentSyntax_QuickFixWorks_UpdateComment_LineHasCode()
354394
Assert.AreEqual(expectedCode, actualCode);
355395
}
356396

397+
[TestMethod]
398+
[TestCategory("Inspections")]
399+
public void ObsoleteCommentSyntax_QuickFixWorks_UpdateComment_LineHasCodeAndContinuation()
400+
{
401+
const string inputCode =
402+
@"Dim Foo As Integer: Rem This is _
403+
a comment";
404+
405+
const string expectedCode =
406+
@"Dim Foo As Integer: ' This is _
407+
a comment";
408+
409+
//Arrange
410+
var settings = new Mock<IGeneralConfigService>();
411+
var config = GetTestConfig();
412+
settings.Setup(x => x.LoadConfiguration()).Returns(config);
413+
414+
var builder = new MockVbeBuilder();
415+
IVBComponent component;
416+
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
417+
var project = vbe.Object.VBProjects[0];
418+
var module = project.VBComponents[0].CodeModule;
419+
var mockHost = new Mock<IHostApplication>();
420+
mockHost.SetupAllProperties();
421+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock<ISinks>().Object));
422+
423+
parser.Parse(new CancellationTokenSource());
424+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
425+
426+
var inspection = new ObsoleteCommentSyntaxInspection(parser.State);
427+
var inspector = new Inspector(settings.Object, new IInspection[] { inspection });
428+
429+
var inspectionResults = inspector.FindIssuesAsync(parser.State, CancellationToken.None).Result;
430+
431+
inspectionResults.First().QuickFixes.Single(s => s is ReplaceObsoleteCommentMarkerQuickFix).Fix();
432+
433+
var actualCode = module.Content();
434+
Assert.AreEqual(expectedCode, actualCode);
435+
}
436+
357437
[TestMethod]
358438
[TestCategory("Inspections")]
359439
public void ObsoleteCommentSyntax_QuickFixWorks_RemoveComment_LineHasCode()

0 commit comments

Comments
 (0)