Frage

Ich bin verrückt nach Syntaxfärbung, wo andere Quelle-Code-Elemente in verschiedenen Farben angezeigt werden. Heute, gute Färbung ist bis es mit dem richtigen Einbuchtung, wenn es um meine Fähigkeit, den Code zu lesen kommt.

einen Blick unter Tools/Customize/Fonts and Colors nehmen, kann ich, dass in einigen Fällen sehen, gibt es feine Granularität; Sie können verschiedene Farben in Strings, und wörtliche Strings, zum Beispiel geben.

Aber hier ist eine typische Linie von C # -Code:

Controls.Add(combo);

Jetzt sind Controls, Add, and combo alle verschiedenen Arten von Dingen, aber sie sind alle in der gleichen Farbe gemacht, denn sie sind alle nur ‚Bezeichner‘.

Sicherlich gibt es eine Möglichkeit, mehr Granularität als das zu bekommen? Mindestens Farbe Methoden anders als Objekte?

War es hilfreich?

Lösung

Ein paar Gedanken.

Als erstes Funktionen sind standardmäßig „nicht implementiert“. Um für eine Funktion implementiert wird, hat jemand von der Funktion zu denken. Dann müssen wir es entwerfen, geben Sie ihm, implementieren, testen, dokumentieren, um ein Transportfahrzeug für sie zu finden, und es die Tür raus. Wenn eines dieser Dinge nicht geschieht, erhalten Sie nicht die Funktion. Soweit ich weiß, hat keines dieser Dinge für diese Funktion geschehen ist.

Zweitens sind Funktionen auf der Grundlage ihrer Nettonutzen priorisiert - das heißt, ihre Gesamtnutzen für unsere Kunden, unsere minus Gesamtkosten sie bei der Umsetzung. Es gibt sehr real „Opportunitätskosten“ hier im Spiel. Jede Funktion, die wir implementieren tun ist, Dutzende von Funktionen, die wir nicht haben Budget für. So bietet nicht nur die Arbeit wert sein müssen, um sie geschehen, sie müssen günstiger sein als jede der Tausende von Funktionen, die wir auf unserer Feature-Request-Listen haben. Das ist eine hohe bar zu erreichen; die meisten Features, die es nie erreichen.

Zu meinem dritten Punkt erklären müssen Sie ein wenig darüber wissen, wie Sprachen verarbeitet werden. Wir beginnen damit, den Quellcode zu nehmen und „lexing“ es in „Token“ - Worte. Zu diesem Zeitpunkt wissen wir, ob jedes Zeichen ist ein Teil einer Reihe, Schnur, Stichwort, Kennung, Kommentar, Präprozessordirektive, und so weiter. Lexing ist unglaublich schnell ; können wir leicht eine Datei zwischen den Tastenanschlägen wieder lex.

Wir nehmen dann die Reihe von Token und „analysieren“, um sie in einen „abstrakten Syntaxbaum“. Dies legt fest, welche Teile des Codes sind Klassen, Ausdrücke, Deklarationen für lokale Variablen, Namen, Aufgaben, was auch immer. Parsing ist auch schnell, aber nicht so schnell wie lexing. Wir haben einige Tricks, wie das Überspringen der Methodenrümpfe Parsen, bis jemand tatsächlich ist sie anzusehen.

Schließlich nehmen wir den abstrakten Syntaxbaum und tun auf sich semantische Analyse; Dies festzustellen, ob ein gegebener Name für eine Art bezieht, als eine lokale Variable eines Namensraum, eine Methode Gruppe, ein Feld, und so weiter. Wir tun beide „top level“ semantische Analyse, die Typenhierarchie des Programms zu bestimmen und „Verfahren level“ semantische Analyse, die Art der jeder Ausdruck in jeder Methode zu bestimmen. „Top-Level“ semantische Analyse ist ziemlich schnell, und jede einzelne Verfahrensanalyse ist ziemlich schnell, aber immer noch, es ist schwer, eine vollständige semantische Analyse zwischen den Tastenanschlägen zu tun.

Natürlich müssen wir die volle semantische Analyse für Intellisense tun, aber wir können mit herauszufinden, weg, welcher Methode Sie zur Zeit in eingeben, und nur die semantische Analyse der obersten Ebene zu tun und dieses Verfahrens.

Aber Einfärben hat auf der gesamten Datei zu arbeiten; Sie können nicht nur die Methode kolorieren, dass sich der Cursor in diesem Augenblick geschieht, zu sein. Daher hat colorization irrsinnig schnell sein, so historisch haben wir koloriert meist auf Basis von lexikalischen Informationen.

Gelegentlich können wir spezielle Sachen herausfinden, wie „dieses Ding ist wahrscheinlich eine Art?“ um ihm eine andere Farbe. Aber herauszufinden, wenn eine bestimmte Person ist, sagen wir, eine Methodengruppe vs, sagen wir, ein Feld von Delegattyp, erfordert eine ziemlich reiche Ebene der semantischen Analyse, ein Niveau, das wir derzeit nicht auf jedem Tastendruck durchführen.

Nun, es gibt Dinge, die wir hier tun können. Wir könnten etwas schlaue Änderungen an den Token-Stream zu verstehen, und nur die Wiederholung grammatische und semantische Analyse auf dem bearbeiteten Teil des Baumes. Wir machen einige der Forschung in diesem Bereich jetzt, aber es ist nur der Forschung; es könnte es nie wirklich in das Produkt machen.

Andere Tipps

Ich glaube, dass die ReSharper Plugin markieren einige erweiterte Syntax bietet wie Sie sprechen. Es kann auch andere Plugins sein, die die gleiche Sache liefern (zu geringer Kosten), die einfach derjenige ist, die ich benutze. Ich stimme Syntax-Hervorhebung sehr nützlich ist. ReSharper tut auch einige nette Dinge wie grau aus totem Code, um es offensichtlich, markieren Sie die aktuelle Zeile, etc.

-Daniel

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top