further improvements to the error messages produced by concepts
This commit is contained in:
parent
9e9b289fc5
commit
fe48dd1cbe
8 changed files with 85 additions and 54 deletions
|
|
@ -1,36 +1,63 @@
|
|||
discard """
|
||||
cmd: "nim c --verbosity:0 --colors:off $file"
|
||||
nimout: '''
|
||||
tests/concepts/texplain.nim(71, 10) Hint: Non-matching candidates for e(y)
|
||||
tests/concepts/texplain.nim(99, 10) Hint: Non-matching candidates for e(y)
|
||||
proc e(i: int): int
|
||||
[User]
|
||||
tests/concepts/texplain.nim(74, 7) Hint: Non-matching candidates for e(10)
|
||||
proc e[ExplainedConcept](o: ExplainedConcept): int
|
||||
tests/concepts/texplain.nim(38, 6) Error: undeclared field: 'foo'
|
||||
tests/concepts/texplain.nim(38, 6) Error: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(38, 6) Error: type mismatch: got (
|
||||
[User]
|
||||
tests/concepts/texplain.nim(77, 10) Hint: Non-matching candidates for e(10)
|
||||
proc e[ExplainedConcept](o: ExplainedConcept): int
|
||||
tests/concepts/texplain.nim(38, 6) Error: undeclared field: 'foo'
|
||||
tests/concepts/texplain.nim(38, 6) Error: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(38, 6) Error: type mismatch: got (
|
||||
[User]
|
||||
tests/concepts/texplain.nim(81, 20) Error: type mismatch: got (
|
||||
tests/concepts/texplain.nim(82, 20) Error: type mismatch: got (
|
||||
tests/concepts/texplain.nim(83, 20) Hint: Non-matching candidates for r(y)
|
||||
proc r(i: string): int
|
||||
[User]
|
||||
tests/concepts/texplain.nim(91, 2) Error: type mismatch: got (MatchingType)
|
||||
|
||||
tests/concepts/texplain.nim(102, 7) Hint: Non-matching candidates for e(10)
|
||||
proc e(o: ExplainedConcept): int
|
||||
tests/concepts/texplain.nim(65, 6) ExplainedConcept: undeclared field: 'foo'
|
||||
tests/concepts/texplain.nim(65, 6) ExplainedConcept: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(65, 6) ExplainedConcept: expression '.' cannot be called
|
||||
tests/concepts/texplain.nim(65, 5) ExplainedConcept: type class predicate failed
|
||||
tests/concepts/texplain.nim(66, 6) ExplainedConcept: undeclared field: 'bar'
|
||||
tests/concepts/texplain.nim(66, 6) ExplainedConcept: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(66, 6) ExplainedConcept: expression '.' cannot be called
|
||||
tests/concepts/texplain.nim(65, 5) ExplainedConcept: type class predicate failed
|
||||
|
||||
tests/concepts/texplain.nim(105, 10) Hint: Non-matching candidates for e(10)
|
||||
proc e(o: ExplainedConcept): int
|
||||
tests/concepts/texplain.nim(65, 6) ExplainedConcept: undeclared field: 'foo'
|
||||
tests/concepts/texplain.nim(65, 6) ExplainedConcept: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(65, 6) ExplainedConcept: expression '.' cannot be called
|
||||
tests/concepts/texplain.nim(65, 5) ExplainedConcept: type class predicate failed
|
||||
tests/concepts/texplain.nim(66, 6) ExplainedConcept: undeclared field: 'bar'
|
||||
tests/concepts/texplain.nim(66, 6) ExplainedConcept: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(66, 6) ExplainedConcept: expression '.' cannot be called
|
||||
tests/concepts/texplain.nim(65, 5) ExplainedConcept: type class predicate failed
|
||||
|
||||
tests/concepts/texplain.nim(109, 20) Error: type mismatch: got (NonMatchingType)
|
||||
but expected one of:
|
||||
proc f[NestedConcept](o: NestedConcept)
|
||||
tests/concepts/texplain.nim(42, 6) Error: undeclared field: 'foo'
|
||||
tests/concepts/texplain.nim(42, 6) Error: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(42, 6) Error: type mismatch: got (
|
||||
tests/concepts/texplain.nim(46, 5) Error: type class predicate failed
|
||||
proc e(o: ExplainedConcept): int
|
||||
tests/concepts/texplain.nim(65, 5) ExplainedConcept: type class predicate failed
|
||||
proc e(i: int): int
|
||||
|
||||
tests/concepts/texplain.nim(110, 20) Error: type mismatch: got (NonMatchingType)
|
||||
but expected one of:
|
||||
proc r(o: RegularConcept): int
|
||||
tests/concepts/texplain.nim(69, 5) RegularConcept: type class predicate failed
|
||||
proc r[T](a: SomeNumber; b: T; c: auto)
|
||||
proc r(i: string): int
|
||||
|
||||
tests/concepts/texplain.nim(111, 20) Hint: Non-matching candidates for r(y)
|
||||
proc r[T](a: SomeNumber; b: T; c: auto)
|
||||
proc r(i: string): int
|
||||
|
||||
tests/concepts/texplain.nim(119, 2) Error: type mismatch: got (MatchingType)
|
||||
but expected one of:
|
||||
proc f(o: NestedConcept)
|
||||
tests/concepts/texplain.nim(69, 6) RegularConcept: undeclared field: 'foo'
|
||||
tests/concepts/texplain.nim(69, 6) RegularConcept: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(69, 6) RegularConcept: expression '.' cannot be called
|
||||
tests/concepts/texplain.nim(69, 5) RegularConcept: type class predicate failed
|
||||
tests/concepts/texplain.nim(70, 6) RegularConcept: undeclared field: 'bar'
|
||||
tests/concepts/texplain.nim(70, 6) RegularConcept: undeclared field: '.'
|
||||
tests/concepts/texplain.nim(70, 6) RegularConcept: expression '.' cannot be called
|
||||
tests/concepts/texplain.nim(69, 5) RegularConcept: type class predicate failed
|
||||
tests/concepts/texplain.nim(73, 5) NestedConcept: type class predicate failed
|
||||
'''
|
||||
line: 46
|
||||
errormsg: "type class predicate failed"
|
||||
line: 119
|
||||
errormsg: "type mismatch: got (MatchingType)"
|
||||
"""
|
||||
|
||||
type
|
||||
|
|
@ -56,6 +83,7 @@ type
|
|||
proc e(o: ExplainedConcept): int = 1
|
||||
proc e(i: int): int = i
|
||||
|
||||
proc r[T](a: SomeNumber, b: T, c: auto) = discard
|
||||
proc r(o: RegularConcept): int = 1
|
||||
proc r(i: string): int = 1
|
||||
|
||||
|
|
@ -77,11 +105,11 @@ echo(e(10) {.explain.}, 20)
|
|||
discard e(10)
|
||||
|
||||
static:
|
||||
# provide diagnostics why the compile block failed
|
||||
# provide diagnostics why the compile block failed
|
||||
assert(compiles(e(n)) {.explain.} == false)
|
||||
assert(compiles(r(n)) {.explain.} == false)
|
||||
assert(compiles(r(y)) {.explain.} == true)
|
||||
|
||||
|
||||
# these should not produce any output
|
||||
assert(compiles(r(10)) == false)
|
||||
assert(compiles(e(10)) == true)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue