Von Fehler zu Fehler

Ich bin diesbezüglich vielleicht ein bisschen eigen, aber ich mag das Fenster Error List in Visual Studio nicht besonders: Die Art und Weise, wie da während dem Tippen von Code andauernd die Fehler auftauchen und wieder verschwinden, stört mich irgendwie und lenkt mich ab.

Ich habe mir deshalb das folgende Makro programmiert, mit dessen Hilfe ich den Cursor von Fehler zu Fehler navigieren kann, wobei der Fehlertext gleich im Statusbereich angezeigt wird. Das ist nicht nur bequemer, als einen Fehler um den anderen in der Error List anzuklicken, sondern ermöglicht mir eben auch, die Error List im Normalfall geschlossen zu halten, womit sich das Problem mit der Ablenkung erledigt hat.

Ich habe hierzu ein Icon in Visual Studio konfiguriert, welches das Makro GoToNextError aufruft.

Eine kleine Schwierigkeit, die sich beim Implementieren des Makros ergab und die noch auf eine elegantere Lösung wartet als jetzt programmiert: Das Makro muss irgendwie merken, dass neu kompiliert wurde, um mit dem Durchgehen der Fehler wieder von vorne beginnen zu können, gesteuert durch die Variable currentError. (Natürlich könnte man ein kleines zweites Makro mit einem zweiten Icon bauen, um von vorne zu beginnen, aber wenn es automatisch geht, ist das bequemer.)

Hierzu wird eine Art „Hashcode“ über die Liste aller Fehler gebildet, und wenn diese ändert, nimmt man an, dass neu compiliert wurde.

Ich war usprünglich skeptisch, ob sich die Einarbeitung in die Visual-Studio-Makro-Programmierung wirklich lohnt, und war auch ein bisschen abgeschreckt durch Visual Basic statt C# als Makro-Sprache und die seltsamen „DTE“-Objekte, aber diese Skepsis hat sich gelegt. Und schliesslich gibt es auch bei einem so ausgereiften Werkzeug wie der Visual-Studio-IDE immer mal wieder etwas zu verbessern, vor allem, wenn die eigene Arbeitsweise etwas ausserhalb des „Mainstream“ liegt…

Option Strict Off
Option Explicit On
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module BrMacros
  Private hashCode As Integer
  Private errList As ErrorList
  Private currentError As Integer

  Private Function ErrorListHashCode() As Integer
    ' Detektiere heuristischerweise eine NEUE Error-Liste nach Kompilation an Hand einer Art Hashcode
    Dim h As Integer
    Dim i As Long
    Dim errItem As ErrorItem
    For i = 1 To errList.ErrorItems.Count
      errItem = errList.ErrorItems.Item(i)
      If Not (errItem.FileName Is Nothing) Then
        h = h + errItem.Line + errItem.Column
      End If
    Next
    ErrorListHashCode = h
  End Function

  Private Function ErrorCount() As Integer
    Dim n As Integer
    Dim i As Long
    Dim errItem As ErrorItem
    n = 0
    For i = 1 To errList.ErrorItems.Count
      errItem = errList.ErrorItems.Item(i)
      If errItem.ErrorLevel = vsBuildErrorLevel.vsBuildErrorLevelHigh Then
        n = n + 1
      End If
    Next
    ErrorCount = n
  End Function

  Public Sub GoToNextError()
    errList = DTE.ToolWindows.ErrorList
    If ErrorCount() = 0 Then
      Exit Sub
    End If
    Dim h As Integer
    h = ErrorListHashCode()
    If h <> hashCode Then
      hashCode = h
      currentError = 1
    End If
    Dim numErrors = errList.ErrorItems.Count
    Dim errItem As ErrorItem
    Do
      If currentError > numErrors Then
        currentError = 1   ' Cycle
      End If
      errItem = errList.ErrorItems.Item(currentError)
      currentError = currentError + 1
      If errItem.ErrorLevel = vsBuildErrorLevel.vsBuildErrorLevelHigh Then
        errItem.Navigate()
        DTE.StatusBar.Text = errItem.Description
        Exit Sub
      End If
    Loop
  End Sub

End Module
Veröffentlicht in Keine Kategorie. Schlagwörter: , , , . Leave a Comment »

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: