Skip to content

Conversation

@MichaReiser
Copy link
Member

Summary

Fixes a bug where the semantic token provider returned out-of-order tokens for
function definitions with a regular parameter coming after a kwargs parameter:

def foo(self, **key, value):
    return

The LSP specification isn't explicit whether out-of-order tokens are allowed, but
the way it reads suggests that providers are expected to return tokens in-order.

The root cause for this issue is that Parameters::iter() only guarantees to
return the parameters in source order if there are no syntax errors because of how
parameters are represented internally (different vectors for the different parameter kinds).

The ideal fix would be to change our Parameters definition but that's a bit more work,
which is why I decided to sort the parameters in place instead.

Fixes astral-sh/ty#1406

Test Plan

Added test

@MichaReiser MichaReiser added the bug Something isn't working label Oct 21, 2025
@MichaReiser MichaReiser requested a review from sharkdp as a code owner October 21, 2025 07:11
@MichaReiser MichaReiser added the server Related to the LSP server label Oct 21, 2025
@MichaReiser MichaReiser requested a review from dcreager as a code owner October 21, 2025 07:11
@MichaReiser MichaReiser added the ty Multi-file analysis & type inference label Oct 21, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Oct 21, 2025

Diagnostic diff on typing conformance tests

No changes detected when running ty on typing conformance tests ✅

@github-actions
Copy link
Contributor

github-actions bot commented Oct 21, 2025

mypy_primer results

No ecosystem changes detected ✅
No memory usage changes detected ✅

Copy link
Contributor

@sharkdp sharkdp left a comment

Choose a reason for hiding this comment

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

Thank you!

@AlexWaygood AlexWaygood removed their request for review October 21, 2025 08:03
@MichaReiser MichaReiser merged commit 523fc41 into main Oct 21, 2025
40 checks passed
@MichaReiser MichaReiser deleted the micha/fix-invalid-semantic-token-order branch October 21, 2025 08:51
dcreager added a commit that referenced this pull request Oct 22, 2025
* main: (65 commits)
  [ty] Some more simplifications when rendering constraint sets (#21009)
  [ty] Make `attributes.md` mdtests faster (#21030)
  [ty] Set `INSTA_FORCE_PASS` and `INSTA_OUTPUT` environment variables from mdtest.py (#21029)
  [ty] Fall back to `Divergent` for deeply nested specializations (#20988)
  [`ruff`] Autogenerate TypeParam nodes (#21028)
  [ty] Add assertions to ensure that we never call `KnownClass::Tuple.to_instance()` or similar (#21027)
  [`ruff`] Auto generate ast Pattern nodes (#21024)
  [`flake8-simplify`] Skip `SIM911` when unknown arguments are present (#20697)
  Render a diagnostic for syntax errors introduced in formatter tests (#21021)
  [ty] Support goto-definition on vendored typeshed stubs (#21020)
  [ty] Implement go-to for binary and unary operators (#21001)
  [ty] Avoid ever-growing default types (#20991)
  [syntax-errors] Name is parameter and global (#20426)
  [ty] Disable panicking mdtest (#21016)
  [ty] Fix completions at end of file (#20993)
  [ty] Fix out-of-order semantic token for function with regular argument after kwargs (#21013)
  [ty] Fix auto import for files with `from __future__` import (#20987)
  [`fastapi`] Handle ellipsis defaults in FAST002 autofix (`FAST002`) (#20810)
  [`ruff`] Skip autofix for keyword and `__debug__` path params (#20960)
  [`flake8-bugbear`] Skip `B905` and `B912` if <2 iterables and no starred arguments (#20998)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working server Related to the LSP server ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LSP hang/crash on certain kinds of syntax error?

3 participants