Skip to content

Commit

Permalink
Merge pull request #5118 from unisonweb/24-06-21-alias-term-force
Browse files Browse the repository at this point in the history
  • Loading branch information
aryairani committed Jun 26, 2024
2 parents c10904c + e1b00d9 commit e589d0f
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 13 deletions.
8 changes: 4 additions & 4 deletions unison-cli/src/Unison/Codebase/Editor/HandleInput.hs
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ loop e = do
branch <- liftIO $ Codebase.getBranchAtPath codebase absPath
_evalErrs <- liftIO $ (Backend.docsInBranchToHtmlFiles sandboxedRuntime codebase branch sourceDirectory)
pure ()
AliasTermI src' dest' -> do
AliasTermI force src' dest' -> do
Cli.Env {codebase} <- ask
src <- traverseOf _Right Cli.resolveSplit' src'
srcTerms <-
Expand All @@ -489,7 +489,7 @@ loop e = do
pure (DeleteNameAmbiguous hqLength name srcTerms Set.empty)
dest <- Cli.resolveSplit' dest'
destTerms <- Cli.getTermsAt (HQ'.NameOnly <$> dest)
when (not (Set.null destTerms)) do
when (not force && not (Set.null destTerms)) do
Cli.returnEarly (TermAlreadyExists dest' destTerms)
description <- inputDescription input
Cli.stepAt description (BranchUtil.makeAddTermName (first Path.unabsolute dest) srcTerm)
Expand Down Expand Up @@ -977,10 +977,10 @@ inputDescription input =
ResetRootI src0 -> do
src <- hp' src0
pure ("reset-root " <> src)
AliasTermI src0 dest0 -> do
AliasTermI force src0 dest0 -> do
src <- hhqs' src0
dest <- ps' dest0
pure ("alias.term " <> src <> " " <> dest)
pure ((if force then "alias.term.force " else "alias.term ") <> src <> " " <> dest)
AliasTypeI src0 dest0 -> do
src <- hhqs' src0
dest <- ps' dest0
Expand Down
2 changes: 1 addition & 1 deletion unison-cli/src/Unison/Codebase/Editor/Input.hs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ data Input
-- > names .foo.bar#asdflkjsdf
-- > names #sdflkjsdfhsdf
NamesI IsGlobal (HQ.HashQualified Name)
| AliasTermI HashOrHQSplit' Path.Split'
| AliasTermI !Bool HashOrHQSplit' Path.Split' -- bool = force?
| AliasTypeI HashOrHQSplit' Path.Split'
| AliasManyI [Path.HQSplit] Path'
| MoveAllI Path.Path' Path.Path'
Expand Down
33 changes: 25 additions & 8 deletions unison-cli/src/Unison/CommandLine/InputPatterns.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1382,14 +1382,30 @@ deleteBranch =
aliasTerm :: InputPattern
aliasTerm =
InputPattern
"alias.term"
[]
I.Visible
[("term to alias", Required, exactDefinitionTermQueryArg), ("alias name", Required, newNameArg)]
"`alias.term foo bar` introduces `bar` with the same definition as `foo`."
$ \case
[oldName, newName] -> Input.AliasTermI <$> handleShortHashOrHQSplit'Arg oldName <*> handleSplit'Arg newName
_ -> Left . warn $ P.wrap "`alias.term` takes two arguments, like `alias.term oldname newname`."
{ patternName = "alias.term",
aliases = [],
visibility = I.Visible,
args = [("term to alias", Required, exactDefinitionTermQueryArg), ("alias name", Required, newNameArg)],
help = "`alias.term foo bar` introduces `bar` with the same definition as `foo`.",
parse = \case
[oldName, newName] -> Input.AliasTermI False <$> handleShortHashOrHQSplit'Arg oldName <*> handleSplit'Arg newName
_ -> Left . warn $ P.wrap "`alias.term` takes two arguments, like `alias.term oldname newname`."
}

aliasTermForce :: InputPattern
aliasTermForce =
InputPattern
{ patternName = "debug.alias.term.force",
aliases = [],
visibility = I.Hidden,
args = [("term to alias", Required, exactDefinitionTermQueryArg), ("alias name", Required, newNameArg)],
help = "`debug.alias.term.force foo bar` introduces `bar` with the same definition as `foo`.",
parse = \case
[oldName, newName] -> Input.AliasTermI True <$> handleShortHashOrHQSplit'Arg oldName <*> handleSplit'Arg newName
_ ->
Left . warn $
P.wrap "`debug.alias.term.force` takes two arguments, like `debug.alias.term.force oldname newname`."
}

aliasType :: InputPattern
aliasType =
Expand Down Expand Up @@ -3283,6 +3299,7 @@ validInputs =
[ add,
aliasMany,
aliasTerm,
aliasTermForce,
aliasType,
api,
authLogin,
Expand Down
27 changes: 27 additions & 0 deletions unison-src/transcripts/alias-term.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
`alias.term` makes a new name for a term.

```ucm:hide
project/main> builtins.mergeio lib.builtins
```

```ucm
project/main> alias.term lib.builtins.bug foo
project/main> ls
```

It won't create a conflicted name, though.

```ucm:error
project/main> alias.term lib.builtins.todo foo
```

```ucm
project/main> ls
```

You can use `debug.alias.term.force` for that.

```ucm
project/main> debug.alias.term.force lib.builtins.todo foo
project/main> ls
```
44 changes: 44 additions & 0 deletions unison-src/transcripts/alias-term.output.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
`alias.term` makes a new name for a term.

```ucm
project/main> alias.term lib.builtins.bug foo
Done.
project/main> ls
1. foo (a -> b)
2. lib/ (643 terms, 92 types)
```
It won't create a conflicted name, though.

```ucm
project/main> alias.term lib.builtins.todo foo
⚠️
A term by that name already exists.
```
```ucm
project/main> ls
1. foo (a -> b)
2. lib/ (643 terms, 92 types)
```
You can use `debug.alias.term.force` for that.

```ucm
project/main> debug.alias.term.force lib.builtins.todo foo
Done.
project/main> ls
1. foo (a -> b)
2. foo (a -> b)
3. lib/ (643 terms, 92 types)
```

0 comments on commit e589d0f

Please sign in to comment.