Skip to content

Conversation

som-snytt
Copy link
Contributor

Fixes #22671

Scala 2 says that the setter was not found.

For += it will add what error caused "convert to assignment" to fail. I added a test but not the addendum.

The Scala 3 message text is tweaked. (A def is not a val, so just say "value".)

Scala 2 omits the name, since the caret points to the name, but supplying the name is useful if it is different from what is written.

Comment on lines 1539 to 1540
|Also, assignment syntax can be used if there is a corresponding setter:
| ${hl("def")} ${name}${hl("_=(x: Int): Unit = _v = x")}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't add this one here. The sugaring for setters is very very scope specific and fragile. It cannot be summarized into the assignment syntax can be used if there is a corresponding setter...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think some words are necessary for user who needs an explanation; I restricted it to class members.

class ReassignmentToVal(name: Name)(using Context)
extends TypeMsg(ReassignmentToValID) {
def msg(using Context) = i"""Reassignment to val $name"""
def msg(using Context) = i"""Reassignment to value $name"""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could actually pass the symbol instead of the name and we would either get val, def,... depending on the actual symbol.

@som-snytt som-snytt force-pushed the issue/22671-assignment-error branch from ef97824 to 76c6790 Compare March 28, 2025 16:09
@som-snytt
Copy link
Contributor Author

I started down the long tail of polishing words.

Let the symbol say what it is, and restrict setter explanation to class-owned symbols. (Need to check class params.)

@som-snytt som-snytt force-pushed the issue/22671-assignment-error branch 2 times, most recently from 7785a12 to 21d48c8 Compare March 29, 2025 21:37
@som-snytt som-snytt force-pushed the issue/22671-assignment-error branch from 21d48c8 to 1187728 Compare July 24, 2025 19:55
@som-snytt
Copy link
Contributor Author

Updated the branch from March, which had the spree contributors.

Improved to include the pathology from neg/assignments: x_= = 42. Some words for the user, and also don't try to format a message such as var x_=_= or similar, which throws in the formatter.

That test also suggested providing the args, which I took to mean show x_=(42).

I ran out of steam and did not add the scala 2 explanation, that x += 1 "does not convert to assignment" because the x is not mutable. The existing message that "it doesn't have a += member" is confusing, not only to beginners.

@som-snytt som-snytt force-pushed the issue/22671-assignment-error branch from 1187728 to fb79c19 Compare July 24, 2025 20:16
@som-snytt som-snytt marked this pull request as ready for review July 24, 2025 20:17
@Gedochao Gedochao requested a review from hamzaremmal July 25, 2025 05:31
-- [E052] Type Error: tests/neg/i22671.scala:20:4 ----------------------------------------------------------------------
20 | y = 27 // error
| ^^^^^^
| Assignment to method x
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the renaming isn't taken into account here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that was intentional, though it could be improved

Assignment to y which is a renaming of method x

or

Assignment to method x imported as y // closer to user syntax

som-snytt and others added 2 commits September 22, 2025 14:11
Co-authored-by: Jan-Pieter van den Heuvel <[email protected]>
Co-authored-by: Seth Tisue <[email protected]>
Co-authored-by: Lucas Nouguier <[email protected]>
Co-authored-by: Prince <[email protected]>
It must have been imported; say so for clarity.
Use current syntax in explanatory examples;
don't use very fake code but prefer /* code */.
Some LOC are made shorter for reading.
@som-snytt som-snytt force-pushed the issue/22671-assignment-error branch from fb79c19 to a9a08b4 Compare September 22, 2025 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Error says none for overloaded symbol
2 participants