report stray constructors in todo

This commit is contained in:
Mitchell Rosen 2024-07-03 11:59:17 -04:00
parent 1857640da4
commit 05d34024bd
3 changed files with 90 additions and 8 deletions

View File

@ -1461,6 +1461,7 @@ notifyUser dir = \case
<> P.group (prettyName shorterName <> ".") <> P.group (prettyName shorterName <> ".")
<> "I'm not able to perform a merge when a type exists nested under an alias of itself. Please separate them or" <> "I'm not able to perform a merge when a type exists nested under an alias of itself. Please separate them or"
<> "delete one copy, and then try merging again." <> "delete one copy, and then try merging again."
-- Note [StrayConstructorMessage] If you change this, also change the other similar one
MergeStrayConstructor aliceOrBob name -> MergeStrayConstructor aliceOrBob name ->
pure . P.lines $ pure . P.lines $
[ P.wrap $ [ P.wrap $
@ -2685,7 +2686,7 @@ handleTodoOutput todo
& P.syntaxToColor & P.syntaxToColor
pure (formatNum n <> name) pure (formatNum n <> name)
pure $ pure $
P.wrap "These terms call `todo`:" P.wrap "These terms call `todo`."
<> P.newline <> P.newline
<> P.newline <> P.newline
<> P.indentN 2 (P.lines terms) <> P.indentN 2 (P.lines terms)
@ -2699,7 +2700,7 @@ handleTodoOutput todo
n <- addNumberedArg (SA.HashQualified (HQ.HashOnly (Reference.toShortHash term))) n <- addNumberedArg (SA.HashQualified (HQ.HashOnly (Reference.toShortHash term)))
pure (formatNum n <> P.syntaxToColor (prettyReference todo.hashLen term)) pure (formatNum n <> P.syntaxToColor (prettyReference todo.hashLen term))
pure $ pure $
P.wrap "These terms do not have any names in the current namespace:" P.wrap "These terms do not have any names in the current namespace."
<> P.newline <> P.newline
<> P.newline <> P.newline
<> P.indentN 2 (P.lines terms) <> P.indentN 2 (P.lines terms)
@ -2713,7 +2714,7 @@ handleTodoOutput todo
n <- addNumberedArg (SA.HashQualified (HQ.HashOnly (Reference.toShortHash typ))) n <- addNumberedArg (SA.HashQualified (HQ.HashOnly (Reference.toShortHash typ)))
pure (formatNum n <> P.syntaxToColor (prettyReference todo.hashLen typ)) pure (formatNum n <> P.syntaxToColor (prettyReference todo.hashLen typ))
pure $ pure $
P.wrap "These types do not have any names in the current namespace:" P.wrap "These types do not have any names in the current namespace."
<> P.newline <> P.newline
<> P.newline <> P.newline
<> P.indentN 2 (P.lines types) <> P.indentN 2 (P.lines types)
@ -2787,7 +2788,7 @@ handleTodoOutput todo
-- Note [MissingConstructorNameMessage] If you change this, also change the other similar one -- Note [MissingConstructorNameMessage] If you change this, also change the other similar one
pure $ pure $
P.wrap P.wrap
"These types have some constructors with missing names:" "These types have some constructors with missing names."
<> P.newline <> P.newline
<> P.newline <> P.newline
<> P.indentN 2 (P.lines types1) <> P.indentN 2 (P.lines types1)
@ -2816,6 +2817,24 @@ handleTodoOutput todo
) )
& P.sep "\n\n" & P.sep "\n\n"
prettyStrayConstructors <-
case todo.incoherentDeclReasons.strayConstructors of
[] -> pure mempty
constructors0 -> do
constructors1 <-
for constructors0 \constructor -> do
n <- addNumberedArg (SA.Name constructor)
pure (formatNum n <> prettyName constructor)
-- Note [StrayConstructorMessage] If you change this, also change the other similar one
pure $
P.wrap
( "These constructors are not nested beneath their corresponding type names. Please either move or"
<> "delete them."
)
<> P.newline
<> P.newline
<> P.indentN 2 (P.lines constructors1)
(pure . P.sep "\n\n" . P.nonEmpty) (pure . P.sep "\n\n" . P.nonEmpty)
[ prettyDependentsOfTodo, [ prettyDependentsOfTodo,
prettyDirectTermDependenciesWithoutNames, prettyDirectTermDependenciesWithoutNames,
@ -2824,7 +2843,8 @@ handleTodoOutput todo
prettyDefnsInLib, prettyDefnsInLib,
prettyConstructorAliases, prettyConstructorAliases,
prettyMissingConstructorNames, prettyMissingConstructorNames,
prettyNestedDeclAliases prettyNestedDeclAliases,
prettyStrayConstructors
] ]
listOfDefinitions :: listOfDefinitions ::

View File

@ -164,3 +164,25 @@ scratch/main> todo
```ucm:hide ```ucm:hide
scratch/main> delete.project scratch scratch/main> delete.project scratch
``` ```
# Stray constructors
The `todo` command complains about stray constructors.
```ucm:hide
scratch/main> builtins.mergeio lib.builtins
```
```unison
type Foo = Bar
```
```ucm
scratch/main> add
scratch/main> alias.term Foo.Bar Baz
scratch/main> todo
```
```ucm:hide
scratch/main> delete.project scratch
```

View File

@ -44,7 +44,7 @@ scratch/main> add
scratch/main> todo scratch/main> todo
These terms call `todo`: These terms call `todo`.
1. foo 1. foo
@ -95,7 +95,7 @@ scratch/main> delete.namespace.force foo
scratch/main> todo scratch/main> todo
These terms do not have any names in the current namespace: These terms do not have any names in the current namespace.
1. #1jujb8oelv 1. #1jujb8oelv
@ -256,7 +256,7 @@ scratch/main> delete.term Foo.Bar
scratch/main> todo scratch/main> todo
These types have some constructors with missing names: These types have some constructors with missing names.
1. Foo 1. Foo
@ -301,3 +301,43 @@ scratch/main> todo
2. Foo.inner.Bar 2. Foo.inner.Bar
``` ```
# Stray constructors
The `todo` command complains about stray constructors.
```unison
type Foo = Bar
```
```ucm
Loading changes detected in scratch.u.
I found and typechecked these definitions in scratch.u. If you
do an `add` or `update`, here's how your codebase would
change:
⍟ These new definitions are ok to `add`:
type Foo
```
```ucm
scratch/main> add
⍟ I've added these definitions:
type Foo
scratch/main> alias.term Foo.Bar Baz
Done.
scratch/main> todo
These constructors are not nested beneath their corresponding
type names. Please either move or delete them.
1. Baz
```