Skip to content

Commit 0e99acc

Browse files
committed
Introduced comment-tag to avoid removing include in iwyu & trial and error removal.
Fixes #38
1 parent e6b46a5 commit 0e99acc

4 files changed

Lines changed: 28 additions & 1 deletion

File tree

IncludeToolbox/Formatter/IncludeLineInfo.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,16 @@ public string RawLine
314314
/// </remarks>
315315
public int LineNumber { get; private set; } = -1;
316316

317+
public static bool ContainsPreserveFlag(string lineText)
318+
{
319+
return lineText.Contains("$include-toolbox-preserve$");
320+
}
321+
322+
/// <summary>
323+
/// Whether the include line should not be removed by iwyu and Trial & Error Removal.
324+
/// </summary>
325+
public bool ShouldBePreserved { get { return ContainsPreserveFlag(lineText); } }
326+
317327
private int delimiter0 = -1;
318328
private int delimiter1 = -1;
319329

IncludeToolbox/IncludeWhatYouUse/IWYU.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ static private void ApplyTasks(Dictionary<string, FormatTask> tasks, bool applyF
189189
{
190190
foreach (int lineToRemove in entry.Value.linesToRemove.Reverse())
191191
{
192-
edit.Delete(originalLines[lineToRemove].ExtentIncludingLineBreak);
192+
if (!Formatter.IncludeLineInfo.ContainsPreserveFlag(originalLines[lineToRemove].GetText()))
193+
edit.Delete(originalLines[lineToRemove].ExtentIncludingLineBreak);
193194
}
194195
}
195196

IncludeToolbox/TrialAndErrorRemoval.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ private void ExtractSelectionAndIncludes(EnvDTE.Document document, TrialAndError
122122
// Optionally skip top most include.
123123
if (settings.IgnoreFirstInclude)
124124
includeLines = includeLines.Skip(1);
125+
126+
// Skip everything with preserve flag.
127+
includeLines = includeLines.Where(x => !x.ShouldBePreserved);
128+
125129
// Apply filter ignore regex.
126130
{
127131
string documentName = Path.GetFileNameWithoutExtension(document.FullName);

Tests/IncludeLineInfoTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,5 +194,17 @@ public void MixedLineEndings()
194194
var parseWithEmpty = IncludeLineInfo.ParseIncludes(sourceCode, ParseOptions.None);
195195
Assert.AreEqual(6, parseWithEmpty.Count);
196196
}
197+
198+
[TestMethod]
199+
public void PreserveFlag()
200+
{
201+
string testCode = @"#include <blorg> // $include-toolbox-preserve$
202+
#include ""test""";
203+
204+
var parsedLines = IncludeLineInfo.ParseIncludes(testCode, ParseOptions.RemoveEmptyLines);
205+
Assert.AreEqual(2, parsedLines.Count);
206+
Assert.IsTrue(parsedLines[0].ShouldBePreserved);
207+
Assert.IsFalse(parsedLines[1].ShouldBePreserved);
208+
}
197209
}
198210
}

0 commit comments

Comments
 (0)