Ein Parser für meinen Code

Code zu Lesen ist fast genauso schwierig wie Code zu Schreiben. Das betrifft nicht nur fremden Code, sondern auch den eigenen Code von vor zwei Monaten. Den man jetzt refactoren darf. Oder möchte.
Damit das Ganze sich ein wenig einfacher gestaltet, ist ein kluger Kopf auf die Idee gekommen, die einzelnen Teile des Codes nach seiner Bestimmung einzufärben. So dass man Funktionen, Variablen und Konstrukte auf den ersten Blick voneinander unterscheiden kann.

Natürlich möchte man diese Teile nicht selber einfärben und da kommen dann Plugins wie tree-sitter bzw. nvim-treesitter ins Spiel, die den Code selbst mit Syntax-Fehlern parsen können, damit sie entsprechend gehighlighted werden. Dazu habe ich mir in meiner Konfiguration unter lua/kaffdaddy/plugins eine Datei mit folgendem Inhalt erstellt:

return {
  {
    "nvim-treesitter/nvim-treesitter",
    event = { "BufReadPre", "BufNewFile" },
    build = ":TSUpdate",
    dependencies = {
      "nvim-treesitter/nvim-treesitter-textobjects",
      "windwp/nvim-ts-autotag",
    },
    config = function()
      local treesitter = require("nvim-treesitter.configs")
      treesitter.setup({
        highlight = {
          enable = true,
        },
        indent = { enable = true },
        autotag = {
          enable = true,
        },
        ensure_installed = {
          "json",
          "javascript",
          "typescript",
          "yaml",
          "html",
          "css",
          "bash",
          "lua",
          "vim",
          "dockerfile",
          "gitignore",
          "php",
          "scss",
          "gitattributes",
          "gitignore",
          "json",
          "json5",
          "regex",
          "typoscript",
        },
        incremental_selection = {
          enable = true,
          keymaps = {
            init_selection = "",
            node_incremental = "",
            scope_incremental = false,
            node_decremental = "",
          },
        },
        context_commentstring = {
          enable = true,
          enable_autocmd = false,
        },
      })
    end,
  },
}

Wie man sieht, ist dort sogar ein Parser für TypoScript enthalten, auf den mich dankenswerterweise Dragan (melde dich, wenn ich hier etwas verlinken soll!) aufmerksam gemacht hat: Teddytrombone/tree-sitter-typoscript
Weil neovim natürlich nicht alle Dateitypen aufgrund ihrer Dateiendung erkennt, habe ich ein wenig mit nathom/filetype.nvim nachgeholfen:

return {
  "nathom/filetype.nvim",
  config = function()
    local filetype = require("filetype")
    filetype.setup({
      overrides = {
        extensions = {
            html = "html",
            tsconfig = "typoscript",
            typoscript = "typoscript",
        }
      }
    })
  end,
}

Den aktuellen Stand meiner Konfiguration kann man sich hier anschauen.

Kommentare

Hallo Manfred,

erstmal ganz vielen Dank für deine Arbeit, die mir das Leben echt leichter macht! Du hattest ja auch ein LSP-Projekt für die Association eingereicht (https://talk.typo3.org/t/lsp-implementation-for-fluid/5052), das ich verfolgt habe.

Den Part, warum das Ganze eine TYPO3-Extension benötigt, habe ich verstanden, für meine Arbeitsweise und Projekte wird das aber so nicht umsetzbar sein.

Hi! Ich bin derjenige, der tree-sitter-typoscript verbrochen hat. Freut mich, dass es auch andere gibt, die TYPO3 mit Neovim entwickeln und das gebrauchen können. Wenn man im Internet sucht, findet man nicht viele, die das machen ;-)

Aktuell arbeite ich an einem "IDE Companion", der über das LSP für verschiedenste Dinge Unterstützung in der IDE liefern soll, z.B. Autovervollständigung von Fluid ViewHelpern aller installierten Extensions. Allerdings ist das derzeit als Pre-Pre-Alpha anzusehen, im Grunde ist es aktuell eine Machbarkeitsstudie bzw. proof of concept ;-)

Aber falls du mal reinschauen willst: https://github.com/Teddytrombone/ide-companion

Wie gesagt, derzeit ist noch alles im Fluss und kann sich jederzeit ändern, ich weiß nichtmal, ob ich den Projekt- oder Repository-Namen nicht auch noch ändere :-D

sg, Manfred

Kommentar schreiben

* Diese Felder sind erforderlich