ruff/crates
Dhruv Manilawala da069aa00c
[red-knot] Infer `lambda` expression (#16547)
## Summary

Part of https://github.com/astral-sh/ruff/issues/15382

This PR adds support for inferring the `lambda` expression and return
the `CallableType`.

Currently, this is only limited to inferring the parameters and a todo
type for the return type.

For posterity, I tried using the `file_expression_type` to infer the
return type of lambda but it would always lead to cycle. The main reason
is that in `infer_parameter_definition`, the default expression is being
inferred using `file_expression_type`, which is correct, but it then

Take the following source code as an example:
```py
lambda x=1: x
```

Here's how the code will flow:
* `infer_scope_types` for the global scope
* `infer_lambda_expression`
* `infer_expression` for the default value `1`
* `file_expression_type` for the return type using the body expression.
This is because the body creates it's own scope
* `infer_scope_types` (lambda body scope)
* `infer_name_load` for the symbol `x` whose visible binding is the
lambda parameter `x`
* `infer_parameter_definition` for parameter `x`
* `file_expression_type` for the default value `1`
* `infer_scope_types` for the global scope because of the default
expression

This will then reach to `infer_definition` for the parameter `x` again
which then creates the cycle.

## Test Plan

Add tests around `lambda` expression inference.
2025-03-11 11:25:20 +05:30
..
red_knot ruff_db: rename `Diagnostic` to `OldDiagnosticTrait` 2025-03-05 08:23:02 -05:00
red_knot_project [red-knot] Support unpacking `with` target (#16469) 2025-03-08 02:36:35 +00:00
red_knot_python_semantic [red-knot] Infer `lambda` expression (#16547) 2025-03-11 11:25:20 +05:30
red_knot_server ruff_db: rename `Diagnostic` to `OldDiagnosticTrait` 2025-03-05 08:23:02 -05:00
red_knot_test print MDTEST_TEST_FILTER value in single-quotes (and escaped) (#16548) 2025-03-07 09:04:52 +01:00
red_knot_vendored [red-knot] Do not ignore typeshed stubs for 'venv' module (#16596) 2025-03-10 09:07:48 +01:00
red_knot_wasm Add `OsSystem` support to mdtests (#16518) 2025-03-06 10:41:40 +01:00
ruff Bump 0.9.10 (#16556) 2025-03-07 09:00:08 -06:00
ruff_annotate_snippets Update pre-commit dependencies (#16465) 2025-03-03 13:10:46 +05:30
ruff_benchmark Add `OsSystem` support to mdtests (#16518) 2025-03-06 10:41:40 +01:00
ruff_cache Fix cache key collisions for paths with separators (#12159) 2024-07-03 07:36:46 -05:00
ruff_db Add `OsSystem` support to mdtests (#16518) 2025-03-06 10:41:40 +01:00
ruff_dev Pass `ParserOptions` to the parser (#16220) 2025-02-19 10:50:50 -05:00
ruff_diagnostics Show errors for attempted fixes only when passed `--verbose` (#15237) 2025-01-03 08:50:13 -06:00
ruff_formatter bump MSRV to 1.83 (#16294) 2025-02-26 06:12:43 -08:00
ruff_graph Pass `ParserOptions` to the parser (#16220) 2025-02-19 10:50:50 -05:00
ruff_index [red-knot] Don't use separate ID types for each alist (#16415) 2025-02-28 14:55:55 -05:00
ruff_linter [`pep8-naming`] Add links to `ignore-names` options in various rules' documentation (#16557) 2025-03-07 14:49:08 -05:00
ruff_macros Add knot.toml schema (#15735) 2025-02-07 10:59:40 +01:00
ruff_notebook bump MSRV to 1.83 (#16294) 2025-02-26 06:12:43 -08:00
ruff_python_ast [red-knot] Understand `typing.Callable` (#16493) 2025-03-08 03:58:52 +00:00
ruff_python_ast_integration_tests Pass `ParserOptions` to the parser (#16220) 2025-02-19 10:50:50 -05:00
ruff_python_codegen Pass `ParserOptions` to the parser (#16220) 2025-02-19 10:50:50 -05:00
ruff_python_formatter Assert that formatted code doesn't introduce any new unsupported syntax errors (#16549) 2025-03-07 09:12:00 +01:00
ruff_python_index Extract `LineIndex` independent methods from `Locator` (#13938) 2024-10-28 07:53:41 +00:00
ruff_python_literal Preserve triple quotes and prefixes for strings (#15818) 2025-02-04 08:41:06 -05:00
ruff_python_parser Assert that formatted code doesn't introduce any new unsupported syntax errors (#16549) 2025-03-07 09:12:00 +01:00
ruff_python_resolver bump MSRV to 1.83 (#16294) 2025-02-26 06:12:43 -08:00
ruff_python_semantic bump MSRV to 1.83 (#16294) 2025-02-26 06:12:43 -08:00
ruff_python_stdlib Revert "Add all PEP-585 names to UP006 rule" (#15250) 2025-01-04 12:23:53 +01:00
ruff_python_trivia [red-knot] Ignore surrounding whitespace when looking for `<!-- snapshot-diagnostics -->` directives in mdtests (#16380) 2025-02-27 13:25:31 +00:00
ruff_python_trivia_integration_tests Pass `ParserOptions` to the parser (#16220) 2025-02-19 10:50:50 -05:00
ruff_server Escape template filenames in glob patterns (#16407) 2025-03-03 09:29:58 -05:00
ruff_source_file [`pyupgrade`] Do not report when a UTF-8 comment is followed by a non-UTF-8 one (`UP009`) (#14728) 2024-12-11 10:30:41 +00:00
ruff_text_size [`ruff`] `itertools.starmap(..., zip(...))` (`RUF058`) (#15483) 2025-01-16 15:18:12 +01:00
ruff_wasm Bump 0.9.10 (#16556) 2025-03-07 09:00:08 -06:00
ruff_workspace Escape template filenames in glob patterns (#16407) 2025-03-03 09:29:58 -05:00