clojure-emacs / clojure-emacs/clojure-mode

Adaptive fill mode broken in docstring

Offen
#660 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Emacs Lisp
Sterne
1k
Forks
249
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

When filling in a docstring, there is no proper adaptive filling and it always seems to fill to the beginning column of the docstring. This problem has annoyed me for more than 5 years, so I stepped a bit through the debugger, but I don't understand Emacs Lisp well enough to provide a proper fix.

```
An arg - asdfasdfasd sadf as dfas df asdf asdf as df as df asd
fas df asdf asdf asdf as df asd fa sd fa sdf as df asdf as dfa sdf
```

Put the cursor somewhere into the indented section and press M-q. In Clojure mode, it will ruin the indentation. Proper adaptive filling will cut `as dfa sdf` and put in on the next line at col 9.

My best solution so far is to set `adaptive-fill-function` to `ignore` and `fill-paragraph-function` to `nil`. So far, I haven't observed any adverse side effects but sure it breaks something.

In general, there seems to be a bunch of logic implemented around docstrings in Clojure mode, but it is not very well documented and probably not working properly. Probably one could draw inspiration for how docstring indentation is solved in other LISP major modes.

I noticed that in Emacs Lisp for instance, docstrings have no special indentation behavior, and in Clojure there are two spaces prepended to each line. Its a weird convention but it seems to be somehow rooted in Clojure core? Is that what all the logic is about? Maybe getting rid of that is too much to ask for, but it would be nice if you can make adaptive filling work.

```
;;; Workaround, use at your own risk
(add-hook 'clojure-mode-hook
(lambda ()
(interactive)
(setq-local fill-paragraph-function nil)
(setq-local adaptive-fill-function 'ignore)))
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Reproduziere das Problem im Clojure mode, indem du den Cursor im eingerückten docstring-Abschnitt platzierst und M-q drückst. Lies die mit docstring zusammenhängende Fülllogik, die adaptive-fill-function und fill-paragraph-function umfasst, und vergleiche sie mit anderen Lisp-Hauptmodi. Als erledigt gilt die Aufgabe, wenn das adaptive Füllen den umbrochenen Text mit der korrekten Einrückung platziert, ohne den gemeldeten Workaround zu benötigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
clojure, emacs-lisp
Bereich
tooling
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.