all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Johan Claesson <johanclaesson@bredband.net>
To: Glenn Morris <rgm@gnu.org>
Cc: 12357@debbugs.gnu.org
Subject: bug#12357: 24.2; list-load-path-shadow should ignore .dir-locals.el
Date: Sun, 16 Sep 2012 20:56:39 +0200	[thread overview]
Message-ID: <871ui1lrtk.fsf@bredband.net> (raw)
In-Reply-To: <87ipbor4jg.fsf@bredband.net> (Johan Claesson's message of "Sat,  08 Sep 2012 16:08:03 +0200")


A command to search for .dir-local.el shadows could look something like
below.  Let me know if a polished version of the code below would be
useful.

I should probably clarify that this was not at all what i had in mind
when writing this bug report/suggestion in the first place :).  I would
be happy if just the list-load-path-shadows command would ignore
.dir-locals.el files.

(defun list-load-path-dir-locals-shadows ()
  (interactive)
  (dir-locals-shadows load-path))

(defun dir-locals-shadows (path)
  (when (stringp path)
    (setq path (list path)))
  (with-current-buffer (get-buffer-create "*Dir-Locals-Shadows*")
    (erase-buffer)
    (dolist (dir path)
      (dir-locals-shadows-aux dir (dir-locals-find-file (file-name-as-directory dir))))
    (if (> (point-max) (point-min))
        (display-buffer (current-buffer))
      (kill-buffer (current-buffer))
      (message "No dir-local shadows found."))))

(defun dir-locals-class-name (class)
  (if (stringp class)
      class
    (if (file-name-directory (symbol-name (cadr class)))
        (concat (car class) dir-locals-file)
      (format "%s%s (class %s)" (car class) dir-locals-file (cadr class)))))

(defun dir-locals-shadows-aux (dir locals)
  (dolist (file (directory-files dir nil nil t))
    (let ((subdir (expand-file-name file dir)))
      (when (and (file-directory-p subdir)
                 (not (or (string-equal file ".")
                          (string-equal file "..")
                          (file-symlink-p subdir))))
        (let ((subdir-locals (dir-locals-find-file (file-name-as-directory subdir))))
          (and locals
               (not (equal locals subdir-locals))
               (insert (format "%s shadows %s\n"
                               (dir-locals-class-name subdir-locals)
                               (dir-locals-class-name locals))))
          (dir-locals-shadows-aux subdir subdir-locals))))))

Regards,

/Johan




Johan Claesson <johanclaesson@bredband.net> writes:

> I did not think about that kind of shadowing.  I agree that would also
> be nice to have reported.  But i think it is a different thing.  Also
> it could be that the user wants the lower dir-locals file to shadow the
> higher one.  But i guess no user wants one lisp file to shadow another
> in the load-path.  
>
> Maybe a separate command could search for dir-local files shadowing
> other dir-local files for a given directory or list of directories.
> (I could submit such a function.)
>
> I usually run list-load-path-shadows in the same go as compiling my
> elisp directory and just like it is nice to have no compiler warnings it
> is nice to have no shadow warnings.
>
> Regards,
>
> /Johan
>
>
> Glenn Morris <rgm@gnu.org> writes:
>
>> Johan Claesson wrote:
>>
>>> A minor suggestion for shadow.el.  list-load-path-shadows will detect
>>> if there are two lisp files with the same name in the load-path.  Such
>>> a clash could cause problems for normal lisp files.  But i think it is
>>> normal to have multiple .dir-locals.el files spread across the
>>> load-path.  In order to avoid false warnings list-load-path-shadows
>>> could ignore the special file name .dir-locals.el.
>>
>> I think you are right, but if any one given directory has more than one
>> dir-locals file above it in the directory tree, then the "lowest" one
>> does indeed shadow all the "higher" ones. So it might be good to still
>> report such cases?





  reply	other threads:[~2012-09-16 18:56 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-05 13:38 bug#12357: 24.2; list-load-path-shadow should ignore .dir-locals.el Johan Claesson
2012-09-05 16:23 ` Johan Claesson
2012-09-08  1:13 ` Glenn Morris
2012-09-08 14:08   ` Johan Claesson
2012-09-16 18:56     ` Johan Claesson [this message]
2014-02-26  8:49       ` Xue Fuqiao
2014-03-02 22:14         ` Johan Claesson
2014-03-02 22:36           ` Xue Fuqiao
2014-03-04 22:29             ` Johan Claesson
2014-03-05  0:54               ` Leo Liu
2014-03-05  7:09                 ` Johan Claesson
2014-03-06  2:07                   ` Glenn Morris
2014-03-06 21:58                     ` Johan Claesson
2014-03-05  7:25                 ` Johan Claesson

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=871ui1lrtk.fsf@bredband.net \
    --to=johanclaesson@bredband.net \
    --cc=12357@debbugs.gnu.org \
    --cc=rgm@gnu.org \
    /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.