Skip to content

Conversation

@timotheecour
Copy link
Member

@timotheecour timotheecour commented Jun 29, 2021

Example

nim r --declaredLocs --hints:off tests/errmsgs/tdeclaredlocs.nim

before PR

tdeclaredlocs.nim(92, 3) Error: type mismatch: got <seq[MyInt2]>
but expected one of:
proc fn(a: Bam) [proc declared in tdeclaredlocs.nim(86, 6)]
  first type mismatch at position: 1
  required type for a: Bam [ref declared in tdeclaredlocs.nim(78, 3)]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: Goo[MyInt2]) [proc declared in tdeclaredlocs.nim(89, 6)]
  first type mismatch at position: 1
  required type for a: Goo[tdeclaredlocs.MyInt2] [object declared in tdeclaredlocs.nim(79, 3)]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: Goo[cint]) [proc declared in tdeclaredlocs.nim(88, 6)]
  first type mismatch at position: 1
  required type for a: Goo[system.cint] [object declared in tdeclaredlocs.nim(79, 3)]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: array[3, Bar]) [proc declared in tdeclaredlocs.nim(82, 6)]
  first type mismatch at position: 1
  required type for a: array[0..2, Bar] [array]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: seq[Bar]) [proc declared in tdeclaredlocs.nim(81, 6)]
  first type mismatch at position: 1
  required type for a: seq[Bar] [sequence]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: seq[MyInt1]) [proc declared in tdeclaredlocs.nim(80, 6)]
  first type mismatch at position: 1
  required type for a: seq[MyInt1] [sequence]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: set[Baz]) [proc declared in tdeclaredlocs.nim(84, 6)]
  first type mismatch at position: 1
  required type for a: set[Baz] [set]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: set[MyInt2]) [proc declared in tdeclaredlocs.nim(83, 6)]
  first type mismatch at position: 1
  required type for a: set[MyInt2] [set]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: var SetBaz) [proc declared in tdeclaredlocs.nim(85, 6)]
  first type mismatch at position: 1
  required type for a: var SetBaz [var]
  but expression 'a' is of type: seq[MyInt2] [sequence]
proc fn(a: var ref ptr Bam) [proc declared in tdeclaredlocs.nim(87, 6)]
  first type mismatch at position: 1
  required type for a: var ref ptr Bam [var]
  but expression 'a' is of type: seq[MyInt2] [sequence]

expression: fn(a)

after PR

tdeclaredlocs.nim(92, 3) Error: type mismatch: got <seq[MyInt2]>
but expected one of:
proc fn(a: Bam) [proc declared in tdeclaredlocs.nim(86, 6)]
  first type mismatch at position: 1
  required type for a: Bam [object declared in tdeclaredlocs.nim(78, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: Goo[MyInt2]) [proc declared in tdeclaredlocs.nim(89, 6)]
  first type mismatch at position: 1
  required type for a: Goo[MyInt2{char}] [object declared in tdeclaredlocs.nim(79, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: Goo[cint]) [proc declared in tdeclaredlocs.nim(88, 6)]
  first type mismatch at position: 1
  required type for a: Goo[cint{int32}] [object declared in tdeclaredlocs.nim(79, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: array[3, Bar]) [proc declared in tdeclaredlocs.nim(82, 6)]
  first type mismatch at position: 1
  required type for a: array[0..2, Bar] [object declared in tdeclaredlocs.nim(74, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: seq[Bar]) [proc declared in tdeclaredlocs.nim(81, 6)]
  first type mismatch at position: 1
  required type for a: seq[Bar] [object declared in tdeclaredlocs.nim(74, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: seq[MyInt1]) [proc declared in tdeclaredlocs.nim(80, 6)]
  first type mismatch at position: 1
  required type for a: seq[MyInt1{int}] [int declared in tdeclaredlocs.nim(72, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: set[Baz]) [proc declared in tdeclaredlocs.nim(84, 6)]
  first type mismatch at position: 1
  required type for a: set[Baz{enum}] [enum declared in tdeclaredlocs.nim(75, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: set[MyInt2]) [proc declared in tdeclaredlocs.nim(83, 6)]
  first type mismatch at position: 1
  required type for a: set[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: var SetBaz) [proc declared in tdeclaredlocs.nim(85, 6)]
  first type mismatch at position: 1
  required type for a: var SetBaz [enum declared in tdeclaredlocs.nim(75, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]
proc fn(a: var ref ptr Bam) [proc declared in tdeclaredlocs.nim(87, 6)]
  first type mismatch at position: 1
  required type for a: var ref ptr Bam [object declared in tdeclaredlocs.nim(78, 3)]
  but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]

expression: fn(a)

future work

  • we shouldn't repeat arguments already expanded eg:
but expression 'a' is of type: seq[MyInt2{char}] [char declared in tdeclaredlocs.nim(73, 3)]

should be mentioned only once

@timotheecour timotheecour changed the title improve --declaredlocs to help disambiguate types (generics, aliases etc) improve --declaredLocs to help disambiguate types (generics, aliases etc) Jun 29, 2021
@timotheecour timotheecour changed the title improve --declaredLocs to help disambiguate types (generics, aliases etc) improve --declaredLocs to help disambiguate types (generics, aliases etc) Jun 29, 2021
@timotheecour timotheecour marked this pull request as ready for review June 29, 2021 20:04
@timotheecour timotheecour added the Ready For Review (please take another look): ready for next review round label Jun 29, 2021
@timotheecour timotheecour requested a review from Araq July 7, 2021 00:26
@timotheecour timotheecour force-pushed the pr_addDeclaredLoc_handle_tyVar branch from 71abb9f to 6f6d139 Compare July 7, 2021 08:26
@timotheecour
Copy link
Member Author

done, PTAL

@Araq Araq merged commit 836b061 into nim-lang:devel Jul 8, 2021
@timotheecour timotheecour deleted the pr_addDeclaredLoc_handle_tyVar branch July 8, 2021 17:02
PMunch pushed a commit to PMunch/Nim that referenced this pull request Mar 28, 2022
…s etc) (nim-lang#18389)

* improve --declaredlocs to help disambiguate types (generics, aliases etc)

* avoid a cyclic deps

* fix test after rebase
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Ready For Review (please take another look): ready for next review round

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants