emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[nongnu] elpa/projectile 3d7a319614 2/3: Make all project type attribute


From: ELPA Syncer
Subject: [nongnu] elpa/projectile 3d7a319614 2/3: Make all project type attributes locally overridable
Date: Tue, 4 Oct 2022 09:59:04 -0400 (EDT)

branch: elpa/projectile
commit 3d7a3196141d61d8a25c78da4fb20f5673503fd7
Author: Laurence Warne <laurencewarne@gmail.com>
Commit: Bozhidar Batsov <bozhidar@batsov.dev>

    Make all project type attributes locally overridable
    
    Add local overrides for the project type attributes test-prefix,
    test-suffix, related-files-fn, src-dir and test-dir.  Add tests
    for this new behaviour.
---
 projectile.el           | 44 +++++++++++++++++++++++++++------
 test/projectile-test.el | 65 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 102 insertions(+), 7 deletions(-)

diff --git a/projectile.el b/projectile.el
index 995df72674..8bcb39646e 100644
--- a/projectile.el
+++ b/projectile.el
@@ -822,6 +822,31 @@ If the value is nil, there is no limit to the opend 
buffers count."
   :type 'integer
   :package-version '(projectile . "2.2.0"))
 
+(defvar projectile-project-test-suffix nil
+  "Use this variable to override the current project's test-suffix property.
+It takes precedence over the test-suffix for the project type when set.
+Should be set via .dir-locals.el.")
+
+(defvar projectile-project-test-prefix nil
+  "Use this variable to override the current project's test-prefix property.
+It takes precedence over the test-prefix for the project type when set.
+Should be set via .dir-locals.el.")
+
+(defvar projectile-project-related-files-fn nil
+  "Use this variable to override the current project's related-files-fn 
property.
+It takes precedence over the related-files-fn attribute for the project type
+when set.  Should be set via .dir-locals.el.")
+
+(defvar projectile-project-src-dir nil
+  "Use this variable to override the current project's src-dir property.
+It takes precedence over the src-dir for the project type when set.
+Should be set via .dir-locals.el.")
+
+(defvar projectile-project-test-dir nil
+  "Use this variable to override the current project's test-dir property.
+It takes precedence over the test-dir for the project type when set.
+Should be set via .dir-locals.el.")
+
 
 ;;; Version information
 
@@ -3652,25 +3677,30 @@ Fallback to DEFAULT-VALUE for missing attributes."
 
 (defun projectile-test-prefix (project-type)
   "Find default test files prefix based on PROJECT-TYPE."
-  (projectile-project-type-attribute project-type 'test-prefix))
+  (or projectile-project-test-prefix
+      (projectile-project-type-attribute project-type 'test-prefix)))
 
 (defun projectile-test-suffix (project-type)
   "Find default test files suffix based on PROJECT-TYPE."
-  (projectile-project-type-attribute project-type 'test-suffix))
+  (or projectile-project-test-suffix
+      (projectile-project-type-attribute project-type 'test-suffix)))
 
 (defun projectile-related-files-fn (project-type)
   "Find relative file based on PROJECT-TYPE."
-  (projectile-project-type-attribute project-type 'related-files-fn))
+  (or projectile-project-related-files-fn
+      (projectile-project-type-attribute project-type 'related-files-fn)))
 
 (defun projectile-src-directory (project-type)
   "Find default src directory based on PROJECT-TYPE."
-  (projectile-project-type-attribute
-   project-type 'src-dir projectile-default-src-directory))
+  (or projectile-project-src-dir
+      (projectile-project-type-attribute
+       project-type 'src-dir projectile-default-src-directory)))
 
 (defun projectile-test-directory (project-type)
   "Find default test directory based on PROJECT-TYPE."
-  (projectile-project-type-attribute
-   project-type 'test-dir projectile-default-test-directory))
+  (or projectile-project-test-dir
+      (projectile-project-type-attribute
+       project-type 'test-dir projectile-default-test-directory)))
 
 (defun projectile-dirname-matching-count (a b)
   "Count matching dirnames ascending file paths in A and B."
diff --git a/test/projectile-test.el b/test/projectile-test.el
index 1e7a2ddb18..875b01ec52 100644
--- a/test/projectile-test.el
+++ b/test/projectile-test.el
@@ -2045,6 +2045,71 @@ projectile-process-current-project-buffers-current to 
have similar behaviour"
                (projectile--get-command-history projectile-project-root))
               :to-equal '("bar" "foo")))))
 
+(describe "projectile-test-prefix"
+  :var ((mock-projectile-project-types
+         '((foo test-prefix "Test"))))
+  (it "gets set test-prefix"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo))
+      (expect (projectile-test-prefix'foo) :to-equal "Test")))
+  (it "uses local override"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo)
+          (projectile-project-test-prefix "Spec"))
+      (expect (projectile-test-prefix 'foo) :to-equal "Spec"))))
+
+(describe "projectile-test-suffix"
+  :var ((mock-projectile-project-types
+         '((foo test-suffix "Test"))))
+  (it "gets set test-suffix"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo))
+      (expect (projectile-test-suffix'foo) :to-equal "Test")))
+  (it "uses local override"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo)
+          (projectile-project-test-suffix "Spec"))
+      (expect (projectile-test-suffix 'foo) :to-equal "Spec"))))
+
+(describe "projectile-related-files-fn"
+  :var ((mock-projectile-project-types
+         '((foo related-files-fn ignore))))
+  (it "gets set related-files-fn"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo))
+      (expect (projectile-related-files-fn 'foo) :to-equal #'ignore)))
+  (it "uses local override"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo)
+          (projectile-project-related-files-fn #'identity))
+      (expect (projectile-related-files-fn 'foo) :to-equal #'identity))))
+
+(describe "projectile-test-directory"
+  :var ((mock-projectile-project-types
+         '((foo test-dir "test"))))
+  (it "gets set test directory"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo))
+      (expect (projectile-test-directory 'foo) :to-equal "test")))
+  (it "uses local override"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo)
+          (projectile-project-test-dir "other"))
+      (expect (projectile-test-directory 'foo) :to-equal "other"))))
+
+(describe "projectile-src-directory"
+  :var ((mock-projectile-project-types
+         '((foo src-dir "src"))))
+  (it "gets set src directory"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo))
+      (expect (projectile-src-directory 'foo) :to-equal "src")))
+  (it "uses local override"
+    (let ((projectile-project-types mock-projectile-project-types)
+          (projectile-project-type 'foo)
+          (projectile-project-src-dir "other"))
+      (expect (projectile-src-directory 'foo) :to-equal "other"))))
+
 ;; A bunch of tests that make sure Projectile commands handle
 ;; gracefully the case of being run outside of a project.
 (assert-friendly-error-when-no-project projectile-project-info)



reply via email to

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