Skip to content

Commit

Permalink
Make 'field is not accessible' and 'field initialized twice' errors p…
Browse files Browse the repository at this point in the history
…oint to the field inside the obj construction (nim-lang#24557)

Fixes two line infos to make the error's clearer inside editors

- 'field is not accessible' would point to the whole object construction
instead of just the field inside the construction
- 'field initialized twice' would point to the colon instead of the
field
  • Loading branch information
ire4ever1190 authored Dec 22, 2024
1 parent f29234b commit 6bc5273
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 2 deletions.
4 changes: 2 additions & 2 deletions compiler/semobjconstr.nim
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ proc semConstrField(c: PContext, flags: TExprFlags,
if nfSkipFieldChecking in assignment[1].flags:
discard
elif not fieldVisible(c, field):
localError(c.config, initExpr.info,
localError(c.config, assignment[0].info,
"the field '$1' is not accessible." % [field.name.s])
return

Expand Down Expand Up @@ -521,7 +521,7 @@ proc semObjConstr(c: PContext, n: PNode, flags: TExprFlags; expectedType: PType
for j in 1..<i:
let prevId = considerQuotedIdent(c, result[j][0])
if prevId.id == id.id:
localError(c.config, field.info, errFieldInitTwice % id.s)
localError(c.config, field[0].info, errFieldInitTwice % id.s)
hasError = true
break
# 2) No such field exists in the constructed type
Expand Down
3 changes: 3 additions & 0 deletions tests/objects/mobjconstr_msgs.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
type
PrivateField* = object
priv: string
23 changes: 23 additions & 0 deletions tests/objects/tobjconstr_msgs.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
discard """
cmd: "nim check $file"
"""

import mobjconstr_msgs


block:
discard PrivateField(
priv: "test" #[tt.Error
^ the field 'priv' is not accessible]#
)


block:
type
Foo = object
field: string
discard Foo(
field: "test",
field: "test" #[tt.Error
^ field initialized twice: 'field']#
)

0 comments on commit 6bc5273

Please sign in to comment.