Serveur de langage
djlint --lsp lance djLint comme serveur de langage sur stdio. Il reste actif : l’éditeur reçoit les erreurs pendant la saisie et formate un document sans démarrer un processus à chaque fois.
Il signale les erreurs et formate des documents entiers. Il ne demande aucun paquet supplémentaire.
Quel que soit l’éditeur, installez djLint là où il peut le trouver, idéalement dans l’environnement virtuel du projet, et lancez l’éditeur depuis celui-ci ou indiquez-lui le djlint de cet environnement. L’éditeur utilise alors la version fixée par le projet, avec les mêmes résultats que votre hook pre-commit ou votre CI.
Visual Studio Code
Installez l’extension djLint, ou sa version sur Open VSX pour VSCodium. Elle trouve djLint dans votre environnement, utilise celui qu’elle embarque sinon, et passe par le serveur de langage quand votre djLint le propose.
Neovim
Avec Neovim 0.11 ou plus récent :
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")
Pour formater, appelez vim.lsp.buf.format().
Pour formater à l’enregistrement, ajoutez à la même configuration :
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,
})
Zed
Installez l’extension djLint.
Helix
Dans languages.toml :
[language-server.djlint]
command = "djlint"
args = ["--lsp"]
[[language]]
name = "html"
language-servers = ["djlint", "vscode-html-language-server"]
IDE JetBrains
Dans PyCharm et les autres IDE basés sur IntelliJ, utilisez le plugin gratuit LSP4IJ :
- Installez LSP4IJ depuis le Marketplace.
- Ouvrez la fenêtre LSP Consoles et ajoutez un nouveau serveur de langage.
- Dans l’onglet Server, indiquez le nom
djLintet la commandedjlint --lsp, avec le chemin complet dudjlintde l’environnement virtuel du projet s’il n’est pas dans le PATH. - Dans l’onglet Mappings, ajoutez un motif de nom de fichier pour vos modèles, comme
*.html. Pour un projet Django, donnez l’identifiant de langagehtmldjango, afin de choisir le bon profil. - Dans l’onglet Configuration, vous pouvez donner les réglages en JSON, sous une clé
djlint.
Les erreurs apparaissent dans l’éditeur, et Reformat Code peut utiliser le serveur pour ces fichiers.
Sublime Text
Avec le paquet LSP, lancez Preferences: LSP Server Configurations et ajoutez :
{
"djlint": {
"enabled": true,
"command": ["djlint", "--lsp"],
"selector": "text.html"
}
}
Emacs
Eglot, fourni avec Emacs 29 et plus récent :
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
'((html-mode web-mode) . ("djlint" "--lsp"))))
Lancez ensuite M-x eglot dans un modèle. eglot-format-buffer le formate.
Réglages
Le serveur lit la configuration du projet comme la ligne de commande, depuis le dossier de chaque fichier vers le haut. Les réglages de l’éditeur ont la priorité mais, comme en ligne de commande, ils peuvent seulement activer une option ou donner une valeur : false ne désactive pas ce que le projet active. Ils portent les noms des options de la ligne de commande, avec des tirets bas ou en camelCase, et des listes peuvent remplacer les valeurs séparées par des virgules :
vim.lsp.config("djlint", {
settings = { djlint = { profile = "django", ignore = { "H013", "H016" } } },
})
Le serveur demande la section djlint avec workspace/configuration. Un éditeur qui ne sait pas répondre peut envoyer les mêmes clés dans initializationOptions.
Deux réglages n’ont pas d’option de ligne de commande :
use_editor_indentation: formater avec la taille de tabulation de l’éditeur, au lieu deindent.python_rules: la valeurfalseignore les règles personnalisées avec unpython_module, ce qui évite d’exécuter le code du projet.
Sans profile défini à l’un de ces endroits, la langue du document en choisit un : htmldjango utilise le profil django, par exemple.
Fonctionnement
- Les erreurs arrivent après une courte pause dans la saisie. Un éditeur avec les diagnostics en pull les demande, les autres les reçoivent.
exclude,extend_excludeetuse_gitignores’appliquent aux documents ouverts. Un document exclu n’a pas d’erreurs et n’est pas formaté.- Il recharge la configuration quand
pyproject.toml,djlint.toml,.djlint.toml,.djlintrc,.djlint_rules.yaml,.editorconfigou.gitignorechangent, si l’éditeur sait surveiller les fichiers, et sinon à l’ouverture ou à l’enregistrement d’un document. Une modification du code dupython_moduled’une règle personnalisée demande un redémarrage. - Une règle lente retarde ce qui la suit, car le serveur traite une chose à la fois.