mirror of
https://github.com/unisonweb/unison.git
synced 2024-10-26 11:07:48 +03:00
Merge pull request #5118 from unisonweb/24-06-21-alias-term-force
This commit is contained in:
commit
e589d0ff75
@ -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 <-
|
||||
@ -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)
|
||||
@ -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
|
||||
|
@ -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'
|
||||
|
@ -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
|
||||
{ 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 =
|
||||
@ -3283,6 +3299,7 @@ validInputs =
|
||||
[ add,
|
||||
aliasMany,
|
||||
aliasTerm,
|
||||
aliasTermForce,
|
||||
aliasType,
|
||||
api,
|
||||
authLogin,
|
||||
|
27
unison-src/transcripts/alias-term.md
Normal file
27
unison-src/transcripts/alias-term.md
Normal file
@ -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
unison-src/transcripts/alias-term.output.md
Normal file
44
unison-src/transcripts/alias-term.output.md
Normal file
@ -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)
|
||||
|
||||
```
|
Loading…
Reference in New Issue
Block a user