Letzte Woche entschied ich mich, eine Visual Studio-Erweiterung für die Messung von C++ Code-Abdeckung zu erstellen. Im Grunde brauchte ich es selbst für meine tägliche Arbeit. Was ich entwickelte, war das Projekt, das gefunden werden kann https://github.com/atlaste/CPPCoverage.Visual Studio Schmuck vor Text stört die Auswahl
Am meisten funktioniert es gut. Allerdings habe ich einige Probleme mit Schmuckschichten:
Eine der Funktionen des Projekts ist es, Hervorhebung des (un) abgedeckten Codes zu erstellen. Hervorhebungen selbst funktioniert gut, aber es scheint, mit dem Auswahlcode von Visual Studio zu stören:
Der entsprechende Code, der für die Hervorhebung verantwortlich ist: mit der
private void HighlightCoverage(CoverageState[] coverdata, ITextViewLine line)
{
IWpfTextViewLineCollection textViewLines = view.TextViewLines;
int lineno = 1 + view.TextSnapshot.GetLineNumberFromPosition(line.Extent.Start);
CoverageState covered = lineno < coverdata.Length ?
coverdata[lineno] : CoverageState.Irrelevant;
if (covered != CoverageState.Irrelevant)
{
SnapshotSpan span = new SnapshotSpan(view.TextSnapshot,
Span.FromBounds(line.Start, line.End));
Geometry g = textViewLines.GetMarkerGeometry(span);
if (g != null)
{
GeometryDrawing drawing = (covered == CoverageState.Covered) ?
new GeometryDrawing(coveredBrush, coveredPen, g) :
new GeometryDrawing(uncoveredBrush, uncoveredPen, g);
drawing.Freeze();
DrawingImage drawingImage = new DrawingImage(drawing);
drawingImage.Freeze();
Image image = new Image();
image.Source = drawingImage;
//Align the image with the top of the bounds of the text geometry
Canvas.SetLeft(image, g.Bounds.Left);
Canvas.SetTop(image, g.Bounds.Top);
layer.AddAdornment(AdornmentPositioningBehavior.TextRelative,
span, null, image, null);
}
}
}
Der komplette Stück Code rechten Kontext finden Sie hier: https://github.com/atlaste/CPPCoverage/blob/master/CoverageExt/CodeRendering/CodeCoverage.cs.
F: Kann mir bitte jemand sagen, wie man die Blöcke auf dem Hintergrund statt im Vordergrund rendert?
PS: Als Behelfslösung Ich habe bemerkt, können Sie einstellen, Undurchsichtigkeit bei die Schicht. Während das eine nette Abwechslung ist, würde ich es vorziehen, die Ebene in den Hintergrund zu stellen. – atlaste