guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

.dir-locals.el vs. guix-devel-mode


From: Alex Kost
Subject: .dir-locals.el vs. guix-devel-mode
Date: Mon, 28 Sep 2015 15:26:52 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Ludovic Courtès (2015-09-27 23:29 +0300) wrote:

> Alex Kost <address@hidden> skribis:
>
[...]
>> The following code may be used to handle this indentation:
>>
>> (defun guix-devel-package-indent (state indent-point normal-indent)
>>   (let ((count (if (and (ignore-errors (down-list) t)
>>                         (looking-at "inherit\\>"))
>>                    1
>>                  0)))
>>     (lisp-indent-specform count state indent-point normal-indent)))
>>
>> (put 'package 'scheme-indent-function 'guix-devel-package-indent)
>
> Nice!  I like it, I think it would be a nice addition.
>
> At the same time I wonder if defining sophisticated indentation rules is
> a good idea in general.  (Though this one was already defined anyway.)

I agree that it's better to avoid unusual indentation rules.

Actually I don't like that ‘inherit’ field is treated specially, I would
leave it as usual:

(package
  (inherit foo)
  (name "foo")
  ...)

But since the inherited packages have the form:

(package (inherit foo)
  (name "foo")
  ...)

I thought this is an existing rule, so I came up with that indentation
function.

>> But it wouldn't work reliably because of ".dir-locals.el", as
>> 'scheme-indent-function' property will be overridden every time a scheme
>> file from git repo is visited.  So my proposition is: what about moving
>> all indentation rules from ".dir-locals.el" to "emacs/guix-devel.el"?
>> So 'guix-devel-mode' will be responsible for all indenting, highlighting
>> and other guix-specific things.  WDYT?
>
> Good question.  .dir-locals.el includes a bunch of internal rules that
> do not make sense outside.
>
> For those who do make sense outside, such as rules for ‘package’, I
> think having them in .dir-locals.el has the advantage that Emacs users
> cannot escape them inadvertently.  With guix-devel.el, there’s a greater
> chance of people not loading it.
>
> Unless .dir-locals.el has something like:
>
>    (eval . (load "emacs/guix-devel.el")) ;…
>
> ?

I am against this.  At first it is ugly; besides don't forget that it
means "guix-devel.el" will be loaded *each time* you open a scheme file
from the guix git directory.

More generally, I'm strongly against using "eval" in .dir-locals.  IMO
this file should be used only to set local variables, and ideally it
shouldn't evaluate an arbitrary code.

> Thoughts?

So I think .dir-locals.el is not the proper place for indentation rules.
IMHO they should be moved to "guix-devel.el" and the manual should
recommend using 'guix-devel-mode' for editing guix package files as it
provides the proper indenting, highlighting and some useful key
bindings.

-- 
Alex



reply via email to

[Prev in Thread] Current Thread [Next in Thread]