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.