> Arguably, the last 2 lines are "variable references" rather than definitions
`var := 3` is assignment expressions. It allows variable assignments to occur inside of larger expressions. For example `if (match := pattern.search(data)) is not None:`.
It mostly used to define new variables and act on them if some condition is met.
My rationale for `var *= 3` was that it is shorthand for `var = var * 3` and currently the `var` on the left hand side is fontified with `font-lock-variable-name-face`.
I wanted shorthand form to be consistent with the full form.
Your point makes sense too, I don't have strong opinion about this.
Also I'm not sure now about `var[ii] = 1`, since it is actually accessing the list or dictionary element and `font-lock-variable-use-face` may suit better here.
Question about new changes.
Should I push them to this patch and provide description of new changes,
or it would be better to wait for review and send them as new patch?
On 09/12/2023 02:39, Denis Zubarev wrote:
assignment feature:
For all examples,
`for var in range(3)`
`var1[ii] = 1; t.var2[jj] = 2`
`var := 3`
`var *= 3`
highlight var as font-lock-variable-name-face
Arguably, the last 2 lines are "variable references" rather than
definitions (so font-lock-variable-use-face might make more sense),
since such operators imply that a variable has already been defined
previously.
And python--treesit-fontify-variable (in the 'variable' feature) already
applies that face.
The first example, however, should indeed use font-lock-variable-name-face.