.NET Code Analyzer 0.2

    • Beta

    Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von SeriTools.

      .NET Code Analyzer 0.2


      Beschreibung:
      Soll diverse kleinere Fehler und Ungereimheiten im VB.NET Code aufspüren. Sicherlich kein Tool für wahre Experten (dafür gibt es auch kostenpflichtige Lösungen).
      Eher ein Tool für Interessenten, Anfänger die desöfteren mal etwas vergessen oder sich fragen wie kann ich mein Code noch optimieren.

      Als Version 0.1 habe ich einen kleinen Beispiel Code voller Fehler beigelegt, es darf aber auch gerne, wer mich ärgern will, einen 4000+ Zeilencode durchjagen :thumbsup:
      Hierbei sei angemerkt das die "Erkennungsliste" derzeit noch dürftig ist, ich würde mich über jede weiteren Vorschläge freuen.

      Bitte bei Problemen immer einen Beispielcode angeben, damit ich es nachvollziehen kann!



      Features

      • Zeilenangabe
      • Fehlerbeschreibung
      • Fehlerzeile im Code wird rot (Standard) markiert
      • Markierungsfarbe frei wählbar
      • DebugModus falls gewünscht, zur besseren Fehlerberichterstattung


      Erkennt derzeit:
      Spoiler anzeigen

      • Subs ohne Event (Handles)
      • Integer welchem ein String zugewiesen wird #1
      • String welchem ein Integer zugewiesen wird #1
      • vbCrLf/vbNewline
      • Bitmap/Image welche in einer Funktion nicht wieder disposed wurde #1 #2
      • Option Strict Off
      • Code-Kommentare (bis zu einem gewissen Teil - werden ignoriert)
      • Variablendeklarationen (String, Integer, Boolean, Bitmap, Image)
      • Unbenutze/Überflüssige Variablen
      • GoTo
      • And/Or in einer If-Then-Abfrage


      #1: Funktioniert sehr gut bei Variablen, Bespiel:

      VB.NET-Quellcode

      1. Integer = String

      Funktioniert derzeit eher mäßig bei Deklarationen, Beispiel:

      VB.NET-Quellcode

      1. Dim Pups As Integer = "Blub"

      Funktioniert derzeit nicht bei Zahlen, Beispiel:

      VB.NET-Quellcode

      1. String += 0

      #2: Bei Auswahl der "Different Search*" Funktion wird ein anderes Verfahren verwendet, welches unter Umständen bessere Ergebnisse liefert.


      Bekannte Probleme:
      Spoiler anzeigen
      Grundsätzlich ist mein Tool immer so gut, wie ich denke das programmiert wurde.
      Dennoch gibt es auch jetzt schon Probleme:
      • Code-Kommentare die nicht am Anfang der Zeile stehen werden nicht erkannt, Beispiel:

        VB.NET-Quellcode

        1. Dim Code as Supertoll ' Hier habe ich etwas super tolles deklariert, dieser Kommentar wird nicht erkannt

      • Beim Überprüfen der String=Integer werden Zahlen ignoriert
      • Es MUSS ein in VB geschriebener Code vorliegen, da momentan auf die Groß/Kleinschreibung geachtet wird
      • Abstruse Namensgebung kann mein Tool völlig aus der Bahn werfen, z.B:

        VB.NET-Quellcode

        1. Function Test(Byval Dim As Boolean) As Boolean ' Hier wird natürlich eine Deklaration vermutet, ist zwar selten das so etwas passiert, es sollte aber nicht als solches erkannt werden.



      ToDo:
      Spoiler anzeigen
      - Viel zu vieles...
      - Vernünftiger Suchalgorithmus, der in der Lage ist bestimmte Filter von Strings zu unterscheiden, z.B.

      VB.NET-Quellcode

      1. Text="Integer" ' sollte nicht als Integer erkannt werden

      - Unterstützung für Code-Zeilenumbrüche ( _ )
      - Überarbeitung des DebugModes
      - Hübscheres Design / Besserer Output (hat momentan eher wenig Priorität)



      Verwendete Programmiersprache:
      Visual Basic .NET (IDE: VB 2010 Express)

      Systemanforderungen:
      .NET Framework 3.5
      Ein in VB.NET geschriebener Code

      Lizenz:
      Freeware

      Changelog:
      Spoiler anzeigen
      Version 0.2
      [+] EventHandler werden berücksichtigt
      [+] Erkennt Or/And in einer IF-Then Abfrage
      [+] Erkennt GoTo
      [~] Progressbar zeigt nun korrekten Fortschritt an und gibt Rückmeldung über die aktuelle Aufgabe
      [!] String/Integer-Check wurde stark überarbeitet und sollte nun wesentlich weniger Fehlmeldungen ausgeben
      [!] Ein Fehler wurde korrigiert der bei längeren Codes auftrat
      [!] Kleinere Fehler wurden behoben
      Dateien

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Hatschi“ ()

      [VB 2010] "Böse" VB6/VB 2003-Funktionen - und ihre "guten"/besseren neuen VB.NET-Alternativen <- Das plus "Option Strict On" tut's auch. Optional kann man noch FxCop dazuholen.
      Oder kann dein teil noch mehr? Kanns gerade nicht testen.
      Von meinem iPhone gesendet

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

      Ist völlig wurscht, das eine ist britisches, das andere amerikanisches Englisch... ich persönlich finde auch das britische besser, aber eigentlich ist es egal.

      Ich habe das Programm jetzt mal getestet... mir ist einiges aufgefallen, was mir ein wenig komisch vorkommt.
      Beispielsweise muss laut deinem Programm jedes Sub ein Handles haben... das ergibt überhaupt keinen Sinn?
      Was ist, wenn ich sowas habe:

      VB.NET-Quellcode

      1. Public Class Boop
      2. Public Shared Sub Beep()
      3. MessageBox.Show("Hi")
      4. End Sub
      5. End Class
      Wo sollte da ein Handles hin? Wäre auch unnötig.

      vbNewLine ist mindestens genau so schlimm wie vbCrLf, kommt beides aus dem Microsoft.VisualBasic-Namespace.

      Es wird nur bei Bitmaps und Images erkannt, ob diese wieder disposed werden... einfacher wäre es, einfach nachzuprüfen, ob die jeweilige Klasse IDisposable implementiert.

      Und auch sonst kann dein Programm nichts, was VS nicht kann.
      Verbesserungswürdig.
      @nikeeee13: Bin mir sicher für die Gosus tun es weit bessere Tools und hab nie behauptet meines ist unschlagbar. Ich fande es nützlich für mich selbst und hatte Spaß es u schreiben. Außerdem FXCop ist ja mal stark geschmackssache.

      haiyyu schrieb:

      Beispielsweise muss laut deinem Programm jedes Sub ein Handles haben... das ergibt überhaupt keinen Sinn?


      Nope, das stimmt so nicht.
      Subs die du beispielsweise so erstellst:

      Sub MeineTolleFunktion(Byval Path As String)
      End Sub

      Oder:

      Sub Test()
      End Sub

      Werden ignoriert, es geht nur um Subs denen ein vermeintliches Event Handles fehlt.

      haiyyu schrieb:


      vbNewLine ist mindestens genau so schlimm wie vbCrLf, kommt beides aus dem Microsoft.VisualBasic-Namespace.


      Der Meinung bin ich auch, ist aber nicht auf meinem Mist gewachsen, ein bekannter Analyser weist auf den Kram hin und war einfach zu implementieren.
      Außerdem heißt es wie bei allem: Mitdenken!
      Ein Mensch mag bei 1+3 auch unter Umständen 5 sehen, ein Programm zählt es zusammen und erkennt 4. Könnte ich nen perfekten Code Analyser schreiben der so klug ist das er deine Fehler im Voraus berechnet und dir Morgens ein Käffchen macht, dann wäre ich vermutlich schon mit zwei Koffern Geld auf Hawaii.
      Na dann.
      Allerdings solltest du beim Erkennen von Event-Handlern auch solche beachten, die mittels AddHandler hinzugefügt wurden.

      VB.NET-Quellcode

      1. Option Strict On
      2. Public Class MyEventArgs
      3. Inherits System.EventArgs
      4. Public Property Boop() As String
      5. Public Sub New(ByVal Boop_ As String)
      6. Boop = Boop_
      7. End Sub
      8. End Class
      9. Public Class SumClass
      10. Public Event SomeEvent As EventHandler(Of MyEventArgs)
      11. Public Sub New()
      12. AddHandler Me.SomeEvent, AddressOf SomeHandler
      13. RaiseEvent SomeEvent(Me, New MyEventArgs("Hi"))
      14. End Sub
      15. Public Sub SomeHandler(ByVal sender As System.Object, ByVal e As MyEventArgs)
      16. MessageBox.Show(e.Boop)
      17. End Sub
      18. End Class
      -> *** Line 21: A sub WITHOUT a handle was found ***