Skip to content

Commit 63eccf7

Browse files
committed
Fix inflection for dashed-words
Example: - "moves" was (correctly) singularized as "move" - "latest-moves" was singularized as "latest-mofe" This is because the inflection library handles some words specially, but was confused by the dashed prefix. This code makes sure only the last word in a dashed variable name is singularized.
1 parent feb7848 commit 63eccf7

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

clj-refactor.el

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3358,12 +3358,18 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-create-fn-from-e
33583358
(cljr--insert-example-fn fn-name args path)))
33593359
(cljr--insert-example-fn fn-name args path))))
33603360

3361+
(defun cljr--inflect-last-word (f s)
3362+
(let* ((words (s-split "-" s))
3363+
(last-word (-last-item words))
3364+
(prefix (-butlast words)))
3365+
(s-join "-" (-concat prefix (list (funcall f last-word))))))
3366+
33613367
(defun cljr--create-fn-from-list-fold (args path)
33623368
(cljr--insert-example-fn (car args)
33633369
(seq-map
33643370
(lambda (it)
33653371
(when-let (name (cljr--guess-param-name it))
3366-
(inflection-singularize-string name)))
3372+
(cljr--inflect-last-word 'inflection-singularize-string name)))
33673373
(cdr args))
33683374
path))
33693375

@@ -3373,7 +3379,7 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-create-fn-from-e
33733379
(seq-map
33743380
(lambda (it)
33753381
(when-let (name (cljr--guess-param-name it))
3376-
(inflection-singularize-string name)))
3382+
(cljr--inflect-last-word 'inflection-singularize-string name)))
33773383
(cdr args)))
33783384
path))
33793385

@@ -3398,7 +3404,7 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-create-fn-from-e
33983404
(defun cljr--create-fn-from-sort (args path)
33993405
(let* ((fn-name (cider-symbol-at-point))
34003406
(param-name (when-let (coll-name (cljr--guess-param-name (car (last args))))
3401-
(inflection-singularize-string coll-name))))
3407+
(cljr--inflect-last-word 'inflection-singularize-string coll-name))))
34023408
(cljr--insert-example-fn fn-name
34033409
(if param-name
34043410
(list (concat param-name "-a")
@@ -3414,7 +3420,7 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-create-fn-from-e
34143420
(when (cljr--keywordp (car args))
34153421
(string-remove-prefix ":" (car args)))
34163422
(when-let (coll-name (cljr--guess-param-name (car (last args))))
3417-
(inflection-singularize-string coll-name)))))
3423+
(cljr--inflect-last-word 'inflection-singularize-string coll-name)))))
34183424
(cljr--insert-example-fn fn-name
34193425
(if making-comparator?
34203426
(if param-name
@@ -3431,7 +3437,7 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-create-fn-from-e
34313437
(cljr--guess-param-name (nth 1 args)))
34323438
"acc")
34333439
(when-let (name (cljr--guess-param-name (car (last args))))
3434-
(inflection-singularize-string name)))
3440+
(cljr--inflect-last-word 'inflection-singularize-string name)))
34353441
path))
34363442

34373443
(defun cljr--unwind-and-extract-this-as-list (name)
@@ -3523,7 +3529,7 @@ and make the whole string lower-cased."
35233529
(inflection-pluralize-string
35243530
(cljr--guess-param-name (cljr--last-arg-s prepped-form))))
35253531
((member fn-call cljr--fns-that-get-item-out-of-coll)
3526-
(inflection-singularize-string
3532+
(cljr--inflect-last-word 'inflection-singularize-string
35273533
(cljr--guess-param-name (cljr--first-arg-s prepped-form)))))))
35283534

35293535
(defvar cljr--semantic-noops--first-position

0 commit comments

Comments
 (0)