Integrationen
Für djLint gibt es mehrere Editor-Integrationen.
Egal welchen Editor Sie verwenden: Installieren Sie djLint dort, wo der Editor es findet, am besten in der virtuellen Umgebung des Projekts, und starten Sie den Editor von dort aus oder verweisen Sie ihn auf das djlint dieser Umgebung. So führt der Editor die Version aus, die Ihr Projekt festlegt, mit denselben Ergebnissen wie Ihr pre-commit-Hook oder Ihre CI.
Visual Studio Code
Installieren Sie die djLint-Erweiterung oder für VSCodium die Erweiterung auf Open VSX. Sie findet djLint in Ihrer Umgebung, greift sonst auf ein mitgeliefertes djLint zurück und verwendet den Sprachserver, wenn Ihr djLint ihn mitbringt.
Der Code der Erweiterung liegt auf GitHub.
Neovim
djLint lässt sich in Neovim als Linter und als Formatter verwenden.
Integrierter LSP-Client (empfohlen)
Neovim 0.11 oder neuer kann ohne Plug-in direkt mit dem Sprachserver von djLint kommunizieren. Damit erhalten Sie Befunde schon während der Eingabe, mit unterstrichenen Bereichen, und zum Formatieren vim.lsp.buf.format():
vim.lsp.config("djlint", {
cmd = { "djlint", "--lsp" },
filetypes = { "html", "htmldjango", "jinja", "jinja.html", "handlebars", "liquid", "gotmpl" },
root_markers = { "pyproject.toml", "djlint.toml", ".djlint.toml", ".djlintrc", ".git" },
})
vim.lsp.enable("djlint")
Um beim Speichern zu formatieren, ergänzen Sie dieselbe Konfiguration um Folgendes:
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = {
"*.html", "*.jinja", "*.jinja2", "*.j2",
"*.hbs", "*.handlebars", "*.liquid", "*.gotmpl",
},
callback = function(args)
vim.lsp.buf.format({ bufnr = args.buf, name = "djlint" })
end,
})
Siehe Einstellungen.
conform.nvim und nvim-lint
conform.nvim formatiert und nvim-lint lintet, indem sie djLint als Befehl ausführen. Befunde haben keinen unterstrichenen Bereich und kommen erst, wenn Sie nvim-lint zum Linten auffordern.
require("conform").setup({ formatters_by_ft = { htmldjango = { "djlint" } } })
require("lint").linters_by_ft = { htmldjango = { "djlint" } }
none-ls
efm-langserver
- Installieren Sie efm-langserver und djLint mit Mason über
:MasonInstall efm djlint. - Fügen Sie
htmldjangozufiletypeshinzu. - Legen Sie eine Formatierungskonfiguration an:
local djlint = {
formatCommand = "djlint --reformat --quiet --warn -",
formatStdin = true,
}
- Verbinden Sie die Sprache mit
htmldjango = { djlint }mit dem Formatter.
Beispielkonfiguration:
local djlint = {
formatCommand = "djlint --reformat --quiet --warn -",
formatStdin = true,
}
require("lspconfig").efm.setup({
filetypes = { "htmldjango" },
init_options = { documentFormatting = true },
settings = {
rootMarkers = { ".git/" },
languages = {
htmldjango = { djlint },
},
},
})
coc.nvim
JetBrains-IDEs
Verwenden Sie in PyCharm und den anderen IDEs auf Basis von IntelliJ das kostenlose Plug-in LSP4IJ:
- Installieren Sie LSP4IJ aus dem Marketplace.
- Öffnen Sie das Toolfenster „LSP Consoles“ und fügen Sie einen neuen Sprachserver hinzu.
- Setzen Sie auf dem Tab Server den Namen auf
djLintund den Befehl aufdjlint --lsp, mit dem vollständigen Pfad desdjlintin der virtuellen Umgebung des Projekts, falls es nicht im PATH liegt. - Fügen Sie auf dem Tab Mappings ein Dateinamensmuster für Ihre Templates hinzu, etwa
*.html. Hat die Konfiguration des Projekts kein Profil, setzen Sie bei einem Django-Projekt die Sprach-ID aufhtmldjango, damit das richtige gewählt wird. - Auf dem Tab Configuration können Sie Einstellungen als JSON unter einem Schlüssel
djlintfestlegen.
Die Befunde erscheinen im Editor, und Reformat Code kann den Server für die zugeordneten Dateien verwenden.
Sublime Text
LSP (empfohlen)
Das Paket LSP führt den Sprachserver aus, der Befunde schon während der Eingabe liefert und formatiert.
Führen Sie Preferences: LSP Server Configurations aus und fügen Sie Folgendes hinzu:
{ "djlint": { "enabled": true, "command": ["djlint", "--lsp"], "selector": "text.html" } }
SublimeLinter
djLint lässt sich als Linter-Plug-in für Sublime Text verwenden. Installieren können Sie es über Package Control.
cmd + shift + p- SublimeLinter installieren
- SublimeLinter-contrib-djlint installieren
Stellen Sie sicher, dass djLint in Ihrem globalen Python installiert ist oder in Ihrem PATH liegt.
Helix
Helix kann den Sprachserver über languages.toml ausführen:
[language-server.djlint]
command = "djlint"
args = ["--lsp"]
[[language]]
name = "html"
language-servers = ["djlint", "vscode-html-language-server"]
Emacs
Eglot, das ab Emacs 29 mitgeliefert wird:
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
'((html-mode web-mode) . ("djlint" "--lsp"))))
Führen Sie dann in einem Template M-x eglot aus. eglot-format-buffer formatiert es.
Sprachserver
djlint --lsp startet djLint als Sprachserver über stdio. Er läuft dauerhaft, sodass ein Editor schon während der Eingabe Befunde erhält und ein Dokument formatiert, ohne jedes Mal einen Prozess zu starten.
Er meldet Befunde und formatiert ganze Dokumente. Er benötigt keine zusätzlichen Pakete. Jeder andere Editor, der LSP spricht, kann ihn mit demselben Befehl ausführen.
Einstellungen
Der Server liest die Konfiguration des Projekts so wie die Befehlszeile, vom Ordner jeder Datei aus aufwärts. Einstellungen aus dem Editor haben Vorrang vor ihr, können aber wie auf der Befehlszeile nur eine Option einschalten oder einen Wert setzen: false schaltet nicht aus, was das Projekt einschaltet. Sie tragen die Namen der Befehlszeilenoptionen, mit Unterstrichen oder in camelCase, und für kommagetrennte Werte lassen sich Listen verwenden:
vim.lsp.config("djlint", {
settings = { djlint = { profile = "django", ignore = { "H013", "H016" } } },
})
Der Server fragt den Abschnitt djlint über workspace/configuration ab. Ein Editor, der darauf nicht antworten kann, kann dieselben Schlüssel in initializationOptions senden.
Zwei Einstellungen haben keine Befehlszeilenoption:
use_editor_indentation: Mit der Tabulatorgröße des Editors formatieren statt mitindent.python_rules: Auffalsesetzen, um benutzerdefinierte Regeln mit einempython_modulezu überspringen. So wird kein Code des Projekts ausgeführt.
djLint übernimmt das profile aus der ersten dieser Quellen, die eines angibt:
- Die Einstellungen des Editors.
- Die Konfiguration des Projekts.
- Die Sprache des Dokuments:
htmldjangoführt zum Beispiel das Profildjangoaus.
Gibt keine davon eines an, läuft djLint wie auf der Befehlszeile ohne Profil. Ein profile in der Konfiguration des Projekts ist die einfachste Wahl: Es funktioniert in jedem Editor, ohne dass eine Sprach-ID eingerichtet werden muss.
Verhalten
- Befunde kommen nach einer kurzen Tipppause. Ein Editor mit Pull-Diagnosen fragt sie ab, jeder andere bekommt sie zugeschickt.
exclude,extend_excludeunduse_gitignoregelten für geöffnete Dokumente. Ein ausgeschlossenes Dokument hat keine Befunde und wird nicht formatiert.- Der Server lädt die Konfiguration neu, wenn sich
pyproject.toml,djlint.toml,.djlint.toml,.djlintrc,.djlint_rules.yaml,.editorconfigoder.gitignoreändern, sofern der Editor Dateien überwachen kann, und andernfalls, wenn ein Dokument geöffnet oder gespeichert wird. Dateien, die überconfigurationoderrulesangegeben sind, werden neu gelesen, wenn ein Dokument geöffnet oder gespeichert wird. Eine Änderung am Code impython_moduleeiner benutzerdefinierten Regel erfordert einen Neustart. - Eine langsame Regel hält alles auf, was danach kommt, denn der Server erledigt eine Sache nach der anderen.
GitHub Actions
In einem GitHub-Actions-Workflow meldet djLint jeden Befund als Annotation, sodass er direkt im Diff eines Pull Requests erscheint. Eine Konfiguration ist nicht nötig: djLint erkennt den Workflow und stellt die Ausgabe automatisch um.
- run: pip install djlint
- run: djlint . --lint --profile django
Mit --no-github-output erhalten Sie stattdessen die einfache Konsolenausgabe, mit --github-output erzwingen Sie Annotationen auch außerhalb von Actions.
Annotationen gehören zu einem einzelnen Pull Request. Um Befunde im Tab „Security“ des Repositorys aufzubewahren, mit einem Verlauf über mehrere Läufe hinweg, schreiben Sie sie als SARIF und laden Sie die Datei hoch:
- run: djlint . --lint --sarif > djlint.sarif
continue-on-error: true
- uses: github/codeql-action/upload-sarif@v4
with:
sarif_file: djlint.sarif
Der Upload-Schritt benötigt die Berechtigung security-events: write für den Job oder den Workflow.
--sarif schreibt ein SARIF-2.1.0-Dokument nach stdout und sonst nichts, sodass es sich wie oben umleiten lässt. Jede aktivierte Regel wird mit einem Link zu ihrer Dokumentation aufgeführt, jeder Befund enthält Zeile und Spalte, und mit --check wird eine Datei, die neu formatiert würde, unter einer Regel formatting gemeldet. Azure DevOps, GitLab und die meisten Editoren lesen dasselbe Format.
Pre-Commit
djLint lässt sich als pre-commit-Hook sowohl als Linter als auch als Formatter verwenden.
Das Repository stellt mehrere vorkonfigurierte Hooks für bestimmte djLint-Profile bereit (sie setzen lediglich das Argument --profile vorab und teilen pre-commit mit, nach welchen Dateiendungen gesucht werden soll):
djlintzum Linten unddjlint-reformatzum Formatieren
Sucht nach Dateien, die auf*.htmlpassen, ohne--profilezu setzen.djlint-djangounddjlint-reformat-django
Sucht nach Dateien, die auf*.htmlpassen, und setzt--profile=django.djlint-jinjaunddjlint-reformat-jinja
Sucht nach Dateien, die auf*.j2,*.jinjaoder*.jinja2passen, und setzt--profile=jinja.djlint-nunjucksunddjlint-reformat-nunjucks
Sucht nach Dateien, die auf*.njkpassen, und setzt--profile=nunjucks.djlint-handlebarsunddjlint-reformat-handlebars
Sucht nach Dateien, die auf*.hbspassen, und setzt--profile=handlebars.djlint-liquidunddjlint-reformat-liquid
Sucht nach Dateien, die auf*.htmlpassen, und setzt--profile=liquid.djlint-golangunddjlint-reformat-golang
Sucht nach Dateien, die auf*.gotmplpassen, und setzt--profile=golang.djlint-teraunddjlint-reformat-tera
Sucht nach Dateien, die auf*.htmlpassen, und setzt--profile=tera.djlint-askamaunddjlint-reformat-askama
Sucht nach Dateien, die auf*.htmlpassen, und setzt--profile=askama.
Beachten Sie, dass diese vordefinierten Hooks bei den akzeptierten Eingaben manchmal zu zurückhaltend sind (Ihre Templates verwenden vielleicht eine andere Dateiendung). Deshalb erlaubt pre-commit ausdrücklich, jede dieser vordefinierten Optionen zu überschreiben. Weitere Konfigurationsmöglichkeiten finden Sie in der Dokumentation von pre-commit.
Standardbeispiel für Django
repos:
- repo: https://github.com/djlint/djLint
rev: v1.49.3
hooks:
- id: djlint-reformat-django
- id: djlint-django
Handlebars mit der Endung .html statt .hbs
repos:
- repo: https://github.com/djlint/djLint
rev: v1.49.3
hooks:
- id: djlint-reformat-handlebars
files: "\\.html"
types_or: ["html"]
- id: djlint-handlebars
files: "\\.html"
types_or: ["html"]
Mit den Parametern files oder exclude können Sie jeden Hook auf ein eigenes Verzeichnis beschränken und so mehrere Template-Sprachen im selben Repository unterstützen.
MegaLinter
djlint ist nativ in die über 100 Linter von MegaLinter eingebunden.
Zur Installation führen Sie einfach npx mega-linter-runner --install aus und folgen den Anweisungen.