Besseres C Syntax Highlighting in Xcode

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ist auch gerade wieder broken oder nicht? Xcode hat ja nie richtig Plugins unterstützt, alles instabil und Gehacke.

    Ist so wie mit Templates: Funktioniert irgendwie "illegal", dann wieder anders, dann wieder nicht, dann wieder mit einem Update, … Wir unterstützen das daher auch nicht offiziell.

    In Xcode stellt es sogar schon ein Problem dar, einen "bekannten und eingebauten" Dateitypen durch ein Skript anstelle des Compilers laufen zu lassen. Kracht an allen Ecken und Enden. Anpassbarkei ist echt die Schwäche von Xcode.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    Ist auch gerade wieder broken oder nicht? Xcode hat ja nie richtig Plugins unterstützt, alles instabil und Gehacke.


    Über Plugins kann ich mich (zurzeit) nicht beschweren. Dauert nach einem Major-Update immer ein paar Tage, aber dann laufen die. Zumindest die, die ich nutze. Templates sind aber schon immer ein Generve, das stimmt.
  • Amin Negm-Awad schrieb:

    Einer der Gründe für clang war es, dass man es von einem Editor aus inkrementell verwenden kann. Dazu kann man clang einen In-Memory-File geben und ihm sagen, was sich gerade wo geändert hat. Der Vorteil liegt auf der Hand: Was er anzeigt, ist das, was er kompiliert. (Läuft freilich zeitlich nach.)
    Ja, ich weiss, dass Clang das kann, bzw. libclang. Ich benutz das entsprechende Vim-plugin ja - aber nur für Completion und Navigation. Das ganze für Syntax-Highlighting zu verwenden ist natürlich irgendwo sinnvoll, macht ja Visual Assist X auch seit Jahren für semantisches Highlighting. Ich wusste aber nicht, dass Xcode das kann (scheinbar braucht man ja ein inoffizielles Plugin dazu?!) - entsprechend verwendet Xcode wohl das ganze Parsing nur, um zu erkennen, wo ein String beginnt und endet?!Interessant ist ja dann, dass doch Clang printf-Strings "versteht" (und bei Bedarf Warnungen gibt) - daher wäre ein Highlighting wie vom Op gewünscht trivial.
    C++
  • Xcode verwendet das. Bedenke, dass die Leute, die clang geschrieben haben, zum Löwenanteil von Apple kommen oder dorthin gegangen sind. Apple hat da deutlich Ressourcen hereingesteckt.

    Xcode selbst verwendet clang. Dazu braucht man kein Plugin. Man kann Xcode inoffiziell mit Plugins erweitern und clang offiziell. (Und es gibt auch noch weitere Möglichkeiten, clang zu "erweitern", "missbrauchen", $whatever.)

    Ich glaube übrigens nicht, dass es eine triviale Erweiterung ist. (\n schon, aber % nicht.) Der Parser baut einen AST. Der AST enthält keine Informationen über "Stringelemente", glaube ich jedenfalls kaum. Wozu auch?

    1. Es ist kein Parsing.
    2. Es gilt nicht für alle Strings, sondern nur für Formatstrings.
    3. Es wäre also höchst antikonzeptionell, in das Parsing(!) einzubauen, dass es sich um einen Formatstring handelt und dann auch noch zu schauen, wie die Parameter folgen. Einfach die falsche Stelle im Compiler. Die Richtigkeit eines Formatstrings kannst du ja erst nach dem Parsen erkennen.

    Daher wirst du da ziemlich intensiv eingreifen müssen. Mutmaßlich wäre eine clang-Action das richtige. Da weiß ich schlicht nicht, ob das bereits der Parser unterstützt und wenn ja, ob das von Xcode berücksichtigt wird. (Immerhin muss ja Xcode dann wissen, dass es da anders einfärben muss, ohne dafür ein Datenmodell zu haben.)
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ich weiss, dass Xcode Clang verwendet, dass Apple viel an Clang/LLVM arbeitet etc etc. Hat aber nicht damit zu tun, ob Clang tatsächlich für das Syntax-Highlighting verwendet wird (weil es mir dafür bislang zu "schwach" vorkam. Aber ich schau halt auch nicht oft in Xcode rein).

    Clang muss da etwas parsen, weil ich mir einbilde printf("%s",5) gäbe eine Warning (bei entsprechendem Warning-Level).

    N.B. Das default Syntax-Highlighting von Vim über mehr oder weniger RegEx highlighted format-strings seit gefühlt 20 Jahren (dafür halt kein semantic highlighting. Aber das hab ich in Xcode auch noch nicht gesehen).
    C++
  • Natürlich wird das geparst. Aber die Fehlermeldung stammt nicht vom Parser. Der liefert dir einen AST. Im Ast steht dann:

    C-String
    int-Variable

    Sogar, wenn der Parser schon die % notieren würde, könnte er das immer noch nicht erkennen, sondern würde den AST

    C-String with %f at 6
    int-Variable

    liefern. Erst danach kann man feststellen, dass das ein Fehler ist. Dass müsste dann also in Xcode erfolgen, was die Sache schwieriger macht, siehe oben.

    Das Syntaxhighlighting ist übrigens wirklich gut in Xcode. Es hat natürlich den Nachteil, dass die Sourcen grundsätzlich compilierbar sein müssen. Aber du kannst in einem manuellem Parser natürlich viel besser erkennen, welches Token wie gemeint ist als bei einem RegEx.
    Auch bei der Code-Completion sieht man das gut, etwa, wenn man einen Include vergisst. Auch das ist hervorragend.

    Aber die Anpassbarkeit ist schlecht.

    Vor- und Nachteile kannst du gut bei Objective-Cloud sehen:

    Die Definition einer Public-API kann mit Sprachmitteln erfolgen, da ich ein entsprechendes Protokoll leicht mit LibTooling compilieren kann. Irgendwelche Konfigurationsdateien mit irgendwelchen XML und irgendwelchen DTD bleiben also dem Proggie erspart. Absolut super.

    Es ist aber stabil nicht möglich, jedenfalls fanden wir keine stabile Möglichkeit,

    a) Ein eigenes Template mit drei Dateien zu erzeugen,
    b) einen eigenen Dateitypen zu definieren, der einer eigenen Compilierungskette folgt.

    Absolut scheiße.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Amin Negm-Awad ()