all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Clément Pit-Claudel" <cpitclaudel@gmail.com>
To: "Eli Zaretskii" <eliz@gnu.org>, "João Távora" <joaotavora@gmail.com>
Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
Subject: Re: Add a separate mode for .dir-locals.el
Date: Sat, 19 Oct 2019 08:53:23 -0400	[thread overview]
Message-ID: <7f141905-6be3-2c21-e2af-b5926dd80223@gmail.com> (raw)
In-Reply-To: <83lfth6p0y.fsf@gnu.org>

On 2019-10-19 05:52, Eli Zaretskii wrote:
> Clément, you've reported the original problem, so could you please
> tell more details about it?  What triggers the problem, and how does
> it manifest itself to the user?  Is it just due to an attempt to
> byte-compile .dir-locals.el, or is it due to something else Flymake
> does?  Thanks.

Hi Eli,

Yes, I can describe in more details.    In fact, I was first made aware of the problem while working on Flycheck, and noticed that it appeared in Flymake too.

Over the years, we've had multiple user complaints that opening .dir-locals.el files in Flycheck cause spurious warnings to appear (e.g. https://github.com/flycheck/flycheck/issues/908).  This is because Flycheck, like Flymake, tries to byte-compile these files, and runs checkdoc on them.  Both of these return spurious warnings.

Flycheck tries to run the byte-compiler and checkdoc because of the major-mode in which .dir-locals.el files are opened.  The reasoning is that, if these files are Emacs Lisp files, then they should conform to Emacs Lisp coding conventions: they should include proper headers, licenses, a `provide' form at the end, etc.  This is how Flycheck works in general: each checker is enabled by one or multiple major modes.  Flymake works in a slightly different fashion: major modes add local hooks to run the relevant checkers.

Of course, .dir-locals.el are not proper Emacs Lisp files, and as a result both the byte compiler and checkdoc produce spurious warnings — but Flycheck doesn't know that, since it relies on the current major mode to decide which checkers to run.

One workaround is to change Flycheck to pattern match on the name of the current file in addition to its major mode, so that .dir-locals.el files are not checked.  This is the solution that I will apply if we decide against introducing a separate mode for dir-locals.el.  On the Flymake side, the definition of emacs-lisp-mode would check the name of the current file, and only add the relevant Flymake hooks if the current file isn't called .dir-locals.el.

My motivation for proposing a separate mode was that we already have a mechanism (atuo-mode-alist) to attach specific behaviors to specific file names, so it seemed natural to reuse that mechanism to run different code for regular ELisp files and dir-locals files.  IOW, I thought it was an anti-pattern to do file-name checks in a major-mode definition.  

Finally, what motivated me to propose a split was the fact that a fix was needed in two places (Flymake and Flycheck), and likely in others (company and completion-at-point-functions should ideally work differently in .dir-locals.el; imenu doesn't make much sense there, ELisp syntax-highlighting is sub-optimal for these files outside of `eval' forms, etc.).

Thanks for your patience and your dedication,
Clément.



  parent reply	other threads:[~2019-10-19 12:53 UTC|newest]

Thread overview: 98+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-17  2:07 Add a separate mode for .dir-locals.el Clément Pit-Claudel
2019-10-17  2:20 ` Lars Ingebrigtsen
2019-10-17  7:53   ` Eli Zaretskii
2019-10-17 11:51     ` Clément Pit-Claudel
2019-10-17 12:21       ` João Távora
2019-10-17 13:16         ` Eli Zaretskii
2019-10-17 13:51           ` Clément Pit-Claudel
2019-10-17 15:45             ` Yuri Khan
2019-10-17 15:47               ` Clément Pit-Claudel
2019-10-17 16:55                 ` Amin Bandali
2019-10-17 14:00           ` João Távora
2019-10-17 15:12             ` Dmitry Gutov
2019-10-17 15:32             ` Stefan Monnier
2019-10-17 15:41               ` João Távora
2019-10-17 15:47                 ` Clément Pit-Claudel
2019-10-17 16:37                 ` Stefan Monnier
2019-10-17 17:04                   ` João Távora
2019-10-17 17:35                     ` Eli Zaretskii
2019-10-17 17:42                       ` João Távora
2019-10-17 17:52                         ` Eli Zaretskii
2019-10-17 18:09                           ` João Távora
2019-10-17 18:28                             ` Eli Zaretskii
2019-10-17 19:00                               ` João Távora
2019-10-17 19:21                                 ` Eli Zaretskii
2019-10-17 19:53                                   ` Stefan Monnier
2019-10-18  7:39                                     ` Eli Zaretskii
2019-10-18 12:56                                       ` Stefan Monnier
2019-10-17 21:35                                   ` João Távora
2019-10-18  8:00                                     ` Eli Zaretskii
2019-10-18  8:38                                       ` Juanma Barranquero
2019-10-18 13:14                                         ` Stefan Monnier
2019-10-18 10:25                                       ` João Távora
2019-10-18 12:33                                         ` Eli Zaretskii
2019-10-18 13:43                                           ` João Távora
2019-10-18 14:07                                             ` Dmitry Gutov
2019-10-19  9:52                                             ` Eli Zaretskii
2019-10-19 11:00                                               ` João Távora
2019-10-19 11:08                                                 ` João Távora
2019-10-19 11:56                                                 ` Eli Zaretskii
2019-10-19 12:55                                                   ` Clément Pit-Claudel
2019-10-19 13:36                                                   ` João Távora
2019-10-19 14:03                                                     ` Eli Zaretskii
2019-10-19 16:13                                                       ` João Távora
2019-10-19 12:53                                               ` Clément Pit-Claudel [this message]
2019-10-19 14:14                                                 ` Eli Zaretskii
2019-10-19 16:51                                                   ` Clément Pit-Claudel
2019-10-19 20:41                                                   ` Dmitry Gutov
2019-10-19 21:35                                                     ` Alan Mackenzie
2019-10-19 22:01                                                       ` Dmitry Gutov
2019-10-20  5:45                                                     ` Eli Zaretskii
2019-10-20  8:17                                                       ` João Távora
2019-10-20 15:40                                                         ` Juri Linkov
2019-10-20 19:29                                                           ` João Távora
2019-10-21 12:43                                                       ` Dmitry Gutov
2019-10-21 13:15                                                         ` Eli Zaretskii
2019-10-21 13:34                                                           ` Dmitry Gutov
2019-10-21 13:41                                                             ` João Távora
2019-10-21 13:48                                                             ` Eli Zaretskii
2019-10-19 20:38                                                 ` Dmitry Gutov
2019-10-20  5:38                                                   ` Eli Zaretskii
2019-10-20 20:21                                                     ` Dmitry Gutov
2019-10-21  6:24                                                       ` Eli Zaretskii
2019-10-21  7:05                                                         ` João Távora
2019-10-21  7:15                                                           ` Eli Zaretskii
2019-10-21  8:25                                                             ` João Távora
2019-10-21 10:09                                                               ` Eli Zaretskii
2019-10-21 10:28                                                                 ` João Távora
2019-10-21 10:59                                                                   ` Eli Zaretskii
2019-10-21 11:22                                                                     ` João Távora
2019-10-21 11:32                                                                       ` Eli Zaretskii
2019-10-21 11:39                                                                         ` João Távora
2019-10-21 12:26                                                         ` Dmitry Gutov
2019-10-17 19:50                               ` Stefan Monnier
2019-10-17 19:59                                 ` Eli Zaretskii
2019-10-17 20:32                                   ` Stefan Monnier
2019-10-18  7:34                                     ` Michael Albinus
2019-10-18  7:52                                     ` Eli Zaretskii
2019-10-18 13:11                                       ` Stefan Monnier
2019-10-19 10:00                                         ` Eli Zaretskii
2019-10-19 14:05                                           ` Stefan Monnier
2019-10-17 16:36               ` Eli Zaretskii
2019-10-17 17:47                 ` Alan Mackenzie
2019-10-17 18:08                   ` Stefan Monnier
2019-10-17 19:46                     ` Alan Mackenzie
2019-10-17 20:19                       ` Stefan Monnier
2019-10-17 18:19                   ` João Távora
2019-10-17 19:38                     ` Alan Mackenzie
     [not found]           ` <CALDnm50Q+QuhYRqZxV4-YzAAqhmU05+nOS3Oh1wvcJsYEX+sbg@mail.gmail.com>
2019-10-17 14:12             ` Eli Zaretskii
2019-10-17 15:31               ` João Távora
2019-10-17  8:55 ` Andreas Schwab
2019-10-17 11:48   ` Clément Pit-Claudel
2019-10-17 12:03     ` Andreas Schwab
2019-10-17 12:10       ` Clément Pit-Claudel
2019-10-18  3:14       ` Richard Stallman
2019-10-17 13:40   ` Stefan Monnier
2019-10-19 12:28     ` Why we SHOULDN'T add " Alan Mackenzie
2019-10-19 12:59       ` Clément Pit-Claudel
2019-10-19 22:04       ` Dmitry Gutov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7f141905-6be3-2c21-e2af-b5926dd80223@gmail.com \
    --to=cpitclaudel@gmail.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=joaotavora@gmail.com \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.