]> git.eshelyaron.com Git - emacs.git/commitdiff
editorconfig-core-handle.el: Fix regressions in fnmatch handling
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 8 Jul 2024 21:09:31 +0000 (17:09 -0400)
committerEshel Yaron <me@eshelyaron.com>
Tue, 9 Jul 2024 17:50:32 +0000 (19:50 +0200)
* lisp/editorconfig-core-handle.el
(editorconfig-core-handle-get-properties-hash): Fix computation of
relative file name.
(editorconfig-core-handle--fnmatch-p): Handle the case when `pattern`
doesn't have a `/` but does match the `/` character.

(cherry picked from commit dce31372a60a9d37591671b8570169c9117e416a)

lisp/editorconfig-core-handle.el

index 96d0723d9e081a59e76d7aec7a0e0a5ba6c72b2d..73c26288287efc4e44af9291e5e540cc5e911613 100644 (file)
@@ -127,9 +127,9 @@ If HANDLE is nil return nil."
 
 If HANDLE is nil return nil."
   (when handle
-    (let ((hash (make-hash-table))
-          (file (file-relative-name file (editorconfig-core-handle-path
-                                          handle))))
+    (let* ((hash (make-hash-table))
+           (dir (file-name-directory (editorconfig-core-handle-path handle)))
+           (file (file-relative-name file dir)))
       (dolist (section (editorconfig-core-handle-sections handle))
         (cl-loop for (key . value) in (editorconfig-core-handle-section-get-properties section file)
                  do (puthash (intern key) value hash)))
@@ -143,7 +143,11 @@ This function is a fnmatch with a few modification for EditorConfig usage."
   (if (string-match-p "/" pattern)
       (let ((pattern (replace-regexp-in-string "\\`/" "" pattern)))
         (editorconfig-fnmatch-p name pattern))
-    (editorconfig-fnmatch-p (file-name-nondirectory name) pattern)))
+    ;; The match is not "anchored" so it can be either in the current dir or
+    ;; in a subdir.  Contrary to Zsh patterns, editorconfig's `**/foo' does
+    ;; not match `foo', so we need to split the problem into two matches.
+    (or (editorconfig-fnmatch-p name pattern)
+        (editorconfig-fnmatch-p name (concat "**/" pattern)))))
 
 (defun editorconfig-core-handle--parse-file (conf)
   "Parse EditorConfig file CONF.