From 8765a8035c816f5605a50291bc5eddd06d28f356 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 18 Jun 2024 17:11:34 -0400 Subject: [PATCH] editorconfig-core-handle.el: Don't use file names as glob pattern Match relative file names against the glob pattern instead of trying to construct a glob pattern that matches the absolute file name (where the code failed to escape the possible special chars). * lisp/editorconfig-core-handle.el (editorconfig-core-handle-section-get-properties): Delete `dir` arg. (editorconfig-core-handle-get-properties-hash) (editorconfig-core-handle-get-properties): Adjust call accordingly. Use `declare` to mark it obsolete. (editorconfig-core-handle--fnmatch-p): Delete `dir` arg. (cherry picked from commit 66d5bc292f1533b21b8fbe46291a0b4ec0b8cb53) --- lisp/editorconfig-core-handle.el | 36 +++++++++++++++----------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/lisp/editorconfig-core-handle.el b/lisp/editorconfig-core-handle.el index 1d7b1f61088..38353b7deb7 100644 --- a/lisp/editorconfig-core-handle.el +++ b/lisp/editorconfig-core-handle.el @@ -51,13 +51,14 @@ Slots: (name nil) (props nil)) -(defun editorconfig-core-handle-section-get-properties (section file dir) +(defun editorconfig-core-handle-section-get-properties (section file) "Return properties alist when SECTION name match FILE. -DIR should be the directory where .editorconfig file which has SECTION lives. -IF not match, return nil." +FILE should be a relative file name, relative to the directory where +the `.editorconfig' file which has SECTION lives. +If not match, return nil." (when (editorconfig-core-handle--fnmatch-p - file (editorconfig-core-handle-section-name section) dir) + file (editorconfig-core-handle-section-name section)) (editorconfig-core-handle-section-props section))) (cl-defstruct editorconfig-core-handle @@ -114,16 +115,14 @@ If HANDLE is nil return nil." The list returned will be ordered by the lines they appear. If HANDLE is nil return nil." + (declare (obsolete editorconfig-core-handle-get-properties-hash "0.8.0")) (when handle - (let ((dir (file-name-directory (editorconfig-core-handle-path handle)))) + (let* ((dir (file-name-directory (editorconfig-core-handle-path handle))) + (file (file-relative-name file dir))) (cl-loop for section in (editorconfig-core-handle-sections handle) - for props = (editorconfig-core-handle-section-get-properties section - file - dir) + for props = (editorconfig-core-handle-section-get-properties + section file) when props collect (copy-alist props))))) -(make-obsolete 'editorconfig-core-handle-get-properties - 'editorconfig-core-handle-get-properties-hash - "0.8.0") (defun editorconfig-core-handle-get-properties-hash (handle file) @@ -132,23 +131,22 @@ If HANDLE is nil return nil." If HANDLE is nil return nil." (when handle (let ((hash (make-hash-table)) - (dir (file-name-directory (editorconfig-core-handle-path - handle)))) + (file (file-relative-name file (editorconfig-core-handle-path + handle)))) (dolist (section (editorconfig-core-handle-sections handle)) - (cl-loop for (key . value) in (editorconfig-core-handle-section-get-properties section file dir) + (cl-loop for (key . value) in (editorconfig-core-handle-section-get-properties section file) do (puthash (intern key) value hash))) hash))) -(defun editorconfig-core-handle--fnmatch-p (name pattern dir) +(defun editorconfig-core-handle--fnmatch-p (name pattern) "Return non-nil if NAME match PATTERN. If pattern has slash, pattern should be relative to DIR. This function is a fnmatch with a few modification for EditorConfig usage." (if (string-match-p "/" pattern) - (let ((pattern (replace-regexp-in-string "^/" "" pattern)) - (dir (file-name-as-directory dir))) - (editorconfig-fnmatch-p name (concat dir pattern))) - (editorconfig-fnmatch-p name (concat "**/" pattern)))) + (let ((pattern (replace-regexp-in-string "\\`/" "" pattern))) + (editorconfig-fnmatch-p name pattern)) + (editorconfig-fnmatch-p (file-name-nondirectory name) pattern))) (defsubst editorconfig-core-handle--string-trim (str) "Remove leading and trailing whitespaces from STR." -- 2.39.2