Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multi word abbreviations (#32; v5) #50

Merged
merged 26 commits into from
Dec 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
d7bce29
feat(expand): try all substrings from longest to shortest
olets Dec 17, 2021
ebe5273
feat(add): do not error on multi-word abbreviations
olets Dec 17, 2021
87ee208
chore(job): minor grammar correction
olets Dec 17, 2021
7214435
style(add): check for negatives when deciding to throw
olets Dec 17, 2021
491dc2f
tests(multi-word abbreviations): new skipped tests
olets Dec 17, 2021
90a578c
feat(add): support multi-word abbreviations
olets Dec 17, 2021
564f851
chore(add): remove apparently unnecessary code. safe??
olets Dec 18, 2021
6129ddf
feat(util_sync_user): support multiword. with question...
olets Dec 18, 2021
8a9bd3a
feat(_abbr_cmd_expansion): support multiword. with question...
olets Dec 18, 2021
940aedb
feat(erase, expand): support multi-word
olets Dec 19, 2021
4f92a03
feat(erase,add): remove some possibly unnecessary quoting
olets Dec 19, 2021
bd34f9a
tests(multi-word): do not skip any tests
olets Dec 19, 2021
a65b279
fix(util_sync_user): abbreviations survive sync
olets Dec 19, 2021
2da589a
fix(util_sync_user): remove possibly unnecessary quoting
olets Dec 19, 2021
6093675
tests(all): account for changed quote levels
olets Dec 19, 2021
6273b2e
fix(add): do not lose quotation marks
olets Dec 20, 2021
1cc4110
fix(logs): correct quote level
olets Dec 20, 2021
dfc5c2a
fix(erase): erases abbreviation (quote level correction)
olets Dec 20, 2021
4379e02
tests(all): correct quote levels
olets Dec 20, 2021
df36b15
feat(rename): can rename (quote level correction)
olets Dec 20, 2021
b68d4f7
tests(rename): passes (correct test typo)
olets Dec 20, 2021
9ef743d
chore(comments): correct typo
olets Dec 20, 2021
0a23e09
feat(expansion): support expanding global abbreviations
olets Dec 20, 2021
cfbdd6c
tests(git import): switch to using 'abbr expand' + correct typo
olets Dec 20, 2021
59d268b
tests(expand): new: global, session, and session global
olets Dec 20, 2021
565c17b
docs(add): multi-word abbreviations are supported
olets Dec 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,14 @@ zsh-abbr has commands to add, rename, and erase abbreviations; to add abbreviati
% gco[Enter] # expands and accepts git checkout
```

The ABBREVIATION must be only one word long.
The ABBREVIATION may be more than one word long.

```shell
% abbr "git cp"="git cherry-pick"
% git cp[Space] # expands as git cherry-pick
% abbr g=git
% g[Space]cp[Space] # expands to git cherry-pick
```

As with aliases, to include whitespace, quotation marks, or other special characters like `;`, `|`, or `&` in the EXPANSION, quote the EXPANSION or `\`-escape the characters as necessary.

Expand Down
2 changes: 2 additions & 0 deletions man/man1/abbr.1
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ Will error rather than overwrite an existing abbreviation.

Will warn if the abbreviation would replace an existing command. To add in spite of the warning, use [\fI\-\-force\fR].

May be multiple words. Quote or escape word delimiters.

.IP \(bu
\fBclear\-session\fR or \fBc\fR

Expand Down
162 changes: 124 additions & 38 deletions tests/abbr.ztr
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

# Tests require ztr
# https://github.com/olets/zsh-test-runner
# Run the suite by sourcing it or by passing it to `zsh`
Expand All @@ -9,6 +8,9 @@ ABBR_USER_ABBREVIATIONS_FILE=${0:A:h}/abbreviations.$RANDOM
touch $ABBR_USER_ABBREVIATIONS_FILE

test_abbr_abbreviation="zsh_abbr_test"
test_abbr_abbreviation_2="zsh_abbr_test_2"
test_abbr_abbreviation_multiword="zsh_abbr_test second_word"
test_abbr_abbreviation_multiword_2="zsh_abbr_test other_second_word"
test_abbr_expansion="zsh abbr test"

source ${0:A:h}/../zsh-abbr.zsh
Expand All @@ -24,99 +26,183 @@ ztr test '[[ ${#ABBR_REGULAR_USER_ABBREVIATIONS} == 0 ]]' \
"Can erase an abbreviation" \
"Dependencies: add"

abbr add $test_abbr_abbreviation_multiword=$test_abbr_expansion
abbr erase $test_abbr_abbreviation_multiword
ztr test '[[ ${#ABBR_REGULAR_USER_ABBREVIATIONS} == 0 ]]' \
"Can erase a multi-word abbreviation" \
"Dependencies: add"

abbr add $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$test_abbr_abbreviation]} == $test_abbr_expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add an abbreviation with the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr add $test_abbr_abbreviation_multiword=$test_abbr_expansion
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a multi-word abbreviation with the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation_multiword

abbr add -g $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ ${(Q)ABBR_GLOBAL_USER_ABBREVIATIONS[$test_abbr_abbreviation]} == $test_abbr_expansion ]]' \
ztr test '[[ ${ABBR_GLOBAL_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a global abbreviation with the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr add -g $test_abbr_abbreviation_multiword=$test_abbr_expansion
ztr test '[[ ${ABBR_GLOBAL_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a multi-word global abbreviation with the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation_multiword

abbr add -S $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ ${(Q)ABBR_REGULAR_SESSION_ABBREVIATIONS[$test_abbr_abbreviation]} == $test_abbr_expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_SESSION_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a regular session abbreviation with the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr add -S $test_abbr_abbreviation_multiword=$test_abbr_expansion
ztr test '[[ ${ABBR_REGULAR_SESSION_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a multi-word regular session abbreviation with the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation_multiword

abbr add -S -g $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ ${(Q)ABBR_GLOBAL_SESSION_ABBREVIATIONS[$test_abbr_abbreviation]} == $test_abbr_expansion ]]' \
ztr test '[[ ${ABBR_GLOBAL_SESSION_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a global session abbreviation with the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr add -S -g $test_abbr_abbreviation_multiword=$test_abbr_expansion
ztr test '[[ ${ABBR_GLOBAL_SESSION_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a multi-word global session abbreviation with the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation_multiword

abbr $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$test_abbr_abbreviation]} == $test_abbr_expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add an abbreviation without the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr $test_abbr_abbreviation_multiword=$test_abbr_expansion
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a multi-word abbreviation without the add flag" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation_multiword

abbr -S $test_abbr_abbreviation=$test_abbr_expansion
abbr clear-session
ztr test '[[ ${#ABBR_REGULAR_SESSION_ABBREVIATIONS} == 0 ]]' \
"Can clear session abbreviations"

abbr $test_abbr_abbreviation=$test_abbr_expansion
abbr add $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ $(abbr expand $test_abbr_abbreviation) == $test_abbr_expansion ]]' \
"Can expand an abbreviation in a script" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr add -g $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ $(abbr expand $test_abbr_abbreviation) == $test_abbr_expansion ]]' \
"Can expand a global abbreviation in a script" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr add -S $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ $(abbr expand $test_abbr_abbreviation) == $test_abbr_expansion ]]' \
"Can expand a session abbreviation in a script" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr add -S -g $test_abbr_abbreviation=$test_abbr_expansion
ztr test '[[ $(abbr expand $test_abbr_abbreviation) == $test_abbr_expansion ]]' \
"Can expand a global session abbreviation in a script" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr $test_abbr_abbreviation_multiword=$test_abbr_expansion
ztr test '[[ $(abbr expand $test_abbr_abbreviation_multiword) == $test_abbr_expansion ]]' \
"Can expand a multi-word abbreviation in a script" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation_multiword

abbr $test_abbr_abbreviation=$test_abbr_expansion
abbr rename $test_abbr_abbreviation ${test_abbr_abbreviation}_new
ztr test '! (( ${+ABBR_REGULAR_USER_ABBREVIATIONS[$test_abbr_abbreviation]} )) \
&& [[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[${test_abbr_abbreviation}_new]} == $test_abbr_expansion ]]' \
"Can rename an abbreviation" \
abbr rename $test_abbr_abbreviation $test_abbr_abbreviation_2
ztr test '! (( ${+ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} )) \
&& [[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_2}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can rename a single-word abbreviation to another single word" \
"Dependencies: erase"
abbr erase ${test_abbr_abbreviation}_new
abbr erase $test_abbr_abbreviation_2

abbr $test_abbr_abbreviation=$test_abbr_expansion
abbr rename $test_abbr_abbreviation $test_abbr_abbreviation_multiword
ztr test '! (( ${+ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} )) \
&& [[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can rename an single-word abbreviation to multiple words" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation_multiword

abbr $test_abbr_abbreviation_multiword=$test_abbr_expansion
abbr rename $test_abbr_abbreviation_multiword $test_abbr_abbreviation_multiword_2
ztr test '! (( ${+ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword}]} )) \
&& [[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword_2}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can rename an multi-word abbreviation to different words" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation_multiword_2

abbr $test_abbr_abbreviation_multiword=$test_abbr_expansion
abbr rename $test_abbr_abbreviation_multiword $test_abbr_abbreviation
ztr test '! (( ${+ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation_multiword}]} )) \
&& [[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can rename an multi-word abbreviation to a single word" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbreviation=a
expansion="b'c'd"
abbr $abbreviation=$expansion
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Double-quoted single quotes in the expansion are preserved" \
"Dependencies: erase"
abbr erase $abbreviation

abbreviation=a
expansion='b"c"d'
abbr $abbreviation=$expansion
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Single-quoted double quotes in the expansion are preserved" \
"Dependencies: erase"
abbr erase $abbreviation

abbreviation=a
expansion='b'cd
abbr $abbreviation=$expansion
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Bare single quotes at the start of the expansion are swallowed" \
"Dependencies: erase"
abbr erase $abbreviation

abbreviation=a
expansion=b'c'd
abbr $abbreviation=$expansion
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Bare single quotes in the middle of the expansion are swallowed" \
"Dependencies: erase"
abbr erase $abbreviation

abbreviation=a
expansion="b"cd
abbr $abbreviation=$expansion
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Bare double quotes at the start of the expansion are swallowed" \
"Dependencies: erase"
abbr erase $abbreviation

abbreviation=a
expansion=b"c"d
abbr $abbreviation=$expansion
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Bare double quotes in the middle of the expansion are swallowed" \
"Dependencies: erase"
abbr erase $abbreviation
Expand All @@ -125,7 +211,7 @@ abbreviation=zsh_abbr_test_alias
expansion=abc
alias $abbreviation=$expansion
abbr import-aliases
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Can import aliases" \
"Dependencies: erase"
abbr erase $abbreviation
Expand All @@ -138,7 +224,7 @@ abbreviation=zsh_abbr_test_alias
expansion="a b"
alias $abbreviation=$expansion
abbr import-aliases
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Can import a multi-word alias" \
"Dependencies: erase"
abbr erase $abbreviation
Expand All @@ -151,7 +237,7 @@ abbreviation=zsh_abbr_test_alias
expansion="a \"b\""
alias $abbreviation=$expansion
abbr import-aliases
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Can import a double-quoted alias with escaped double quotation marks" \
"Dependencies: erase"
abbr erase $abbreviation
Expand All @@ -164,7 +250,7 @@ abbreviation=zsh_abbr_test_alias
expansion='a "b"'
alias $abbreviation=$expansion
abbr import-aliases
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Can import a single-quoted alias with double quotation marks" \
"Dependencies: erase"
abbr erase $abbreviation
Expand All @@ -177,7 +263,7 @@ abbreviation=zsh_abbr_test_alias
expansion="a 'b'"
alias $abbreviation=$expansion
abbr import-aliases
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$abbreviation]} == $expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)abbreviation}]} == ${(qqq)expansion} ]]' \
"Can import a double-quoted alias with single quotation marks" \
"Dependencies: erase"
abbr erase $abbreviation
Expand All @@ -189,39 +275,39 @@ ztr test '[[ -z $(abbr expand $test_abbr_abbreviation) ]]' \
"Can delete a user abbreviation from outside abbr without unexpected retention"

echo "abbr add $test_abbr_abbreviation='$test_abbr_expansion'" > $ABBR_USER_ABBREVIATIONS_FILE
ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[$test_abbr_abbreviation]} == $test_abbr_expansion ]]' \
ztr test '[[ ${ABBR_REGULAR_USER_ABBREVIATIONS[${(qqq)test_abbr_abbreviation}]} == ${(qqq)test_abbr_expansion} ]]' \
"Can add a user abbreviation from outside abbr without data loss" \
"Dependencies: erase"
abbr erase $test_abbr_abbreviation

abbr import-git-aliases --file ${0:A:h}/test-gitconfig

ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[test-subcommand]} == "git status" ]] \
&& [[ ${(Q)ABBR_GLOBAL_USER_ABBREVIATIONS[gtest-subcommand]} == "git status" ]]' \
ztr test '[[ $(abbr expand test-subcommand) == "git status" ]] \
&& [[ $(abbr expand gtest-subcommand) == "git status" ]]' \
"Can import single-word subcommand Git aliases" \
"Dependencies: erase"
"Dependencies: erase, expand"
abbr erase test-subcommand
abbr erase gtest-subcommand

ztr test '[[ ${(Q)ABBR_REGULAR_USER_ABBREVIATIONS[test-subcommand-multiword]} == "git checkout main" ]] \
&& [[ ${(Q)ABBR_GLOBAL_USER_ABBREVIATIONS[gtest-subcommand-multiword]} == "git checkout main" ]]' \
ztr test '[[ $(abbr expand test-subcommand-multiword) == "git checkout main" ]] \
&& [[ $(abbr expand gtest-subcommand-multiword) == "git checkout main" ]]' \
"Can import multi-word subcommand Git aliases" \
"Dependencies: erase"
abbr erase test-subcommand-multiword
abbr erase gtest-subcommand-multiword
"Dependencies: erase, expand"
abbr erase test-subcommand-multi-word
abbr erase gtest-subcommand-multi-word

ztr test '(( ! ${+ABBR_REGULAR_USER_ABBREVIATIONS[test-command]} )) \
&& (( ! ${+ABBR_GLOBAL_USER_ABBREVIATIONS[gtest-command]} ))' \
ztr test '(( ! ${+ABBR_REGULAR_USER_ABBREVIATIONS["test-command"]} )) \
&& (( ! ${+ABBR_GLOBAL_USER_ABBREVIATIONS["gtest-command"]} ))' \
"Cannot import command Git aliases" \
"Dependencies: erase"

ztr test '(( ! ${+ABBR_REGULAR_USER_ABBREVIATIONS[test-function]} )) \
&& (( ! ${+ABBR_GLOBAL_USER_ABBREVIATIONS[gtest-function]} ))' \
ztr test '(( ! ${+ABBR_REGULAR_USER_ABBREVIATIONS["test-function"]} )) \
&& (( ! ${+ABBR_GLOBAL_USER_ABBREVIATIONS["gtest-function"]} ))' \
"Cannot import single-line function Git aliases" \
"Dependencies: erase"

ztr test '(( ! ${+ABBR_REGULAR_USER_ABBREVIATIONS[test-function-multiline]} )) \
&& (( ! ${+ABBR_GLOBAL_USER_ABBREVIATIONS[gtest-function-multiline]} ))' \
ztr test '(( ! ${+ABBR_REGULAR_USER_ABBREVIATIONS["test-function-multiline"]} )) \
&& (( ! ${+ABBR_GLOBAL_USER_ABBREVIATIONS["gtest-function-multiline"]} ))' \
"Cannot import multi-line function Git aliases" \
"Dependencies: erase"

Expand Down
Loading