aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src
Commit message (Collapse)AuthorAgeFilesLines
* Merge #5149bors[bot]2020-07-017-66/+135
|\ | | | | | | | | | | | | | | | | | | 5149: Implement Chalk variable kinds r=flodiebold a=flodiebold This means we need to keep track of the kinds (general/int/float) of variables in `Canonical`, which requires some more ceremony. (It also exposes some places where we're not really dealing with canonicalization correctly -- another thing to be cleaned up when we switch to using Chalk's types directly.) Should fix the last remaining issue of #2534. Co-authored-by: Florian Diebold <[email protected]>
| * Implement Chalk variable kindsFlorian Diebold2020-07-017-66/+135
| | | | | | | | | | | | | | | | | | This means we need to keep track of the kinds (general/int/float) of variables in `Canonical`, which requires some more ceremony. (It also exposes some places where we're not really dealing with canonicalization correctly -- another thing to be cleaned up when we switch to using Chalk's types directly.) Should fix the last remaining issue of #2534.
* | ItemTree: Lower fields despite invalid typeJonas Schievink2020-07-011-0/+24
| |
* | Split `CrateImplDefs` in inherent and trait implsJonas Schievink2020-07-013-105/+110
| | | | | | | | | | | | This makes the intention of inherent vs. trait impls somewhat more clear and also fixes (?) an issue where trait impls with an unresolved trait were added as inherent impls instead (hence the test changes).
* | Don't recursively call `impls_from_deps`Jonas Schievink2020-07-011-11/+2
| | | | | | | | | | It creates a big map and duplicates lots of impls that are then left lying around
* | Use dynamic dispatch in AstDiagnosticLaurențiu Nicola2020-07-011-5/+5
|/
* Better factoringAleksey Kladov2020-06-302-9/+18
|
* Update the rest of the testsAleksey Kladov2020-06-297-438/+297
|
* (T): make typification tests more data drivenAleksey Kladov2020-06-294-133/+103
|
* Merge #5124bors[bot]2020-06-294-18/+92
|\ | | | | | | | | | | | | | | 5124: (Partially) fix handling of type params depending on type params r=matklad a=flodiebold If the first type parameter gets inferred, that's still not handled correctly; it'll require some more refactoring: E.g. if we have `Thing<T, F=fn() -> T>` and then instantiate `Thing<_>`, that gets turned into `Thing<_, fn() -> _>` before the `_` is instantiated into a type variable -- so afterwards, we have two type variables without any connection to each other. Co-authored-by: Florian Diebold <[email protected]>
| * (Partially) fix handling of type params depending on type paramsFlorian Diebold2020-06-294-18/+92
| | | | | | | | | | | | | | | | If the first type parameter gets inferred, that's still not handled correctly; it'll require some more refactoring: E.g. if we have `Thing<T, F=fn() -> T>` and then instantiate `Thing<_>`, that gets turned into `Thing<_, fn() -> _>` before the `_` is instantiated into a type variable -- so afterwards, we have two type variables without any connection to each other.
* | Simlify with matches!()Veetaha2020-06-282-13/+3
|/
* Simplify unsafe expr collection matchPaul Daniel Faria2020-06-271-4/+3
|
* Improve perf of finding unsafe exprsPaul Daniel Faria2020-06-271-49/+39
|
* Remove unneeded code, filename from tests, fix rebasing issuesPaul Daniel Faria2020-06-272-17/+5
|
* Remove track_parent and parent_map, replace with simple walk in missign ↵Paul Daniel Faria2020-06-271-19/+23
| | | | unsafe validator
* unsafe: Clean up, improve tracking, add debug_assertPaul Daniel Faria2020-06-272-72/+74
| | | | | | Move unsafe_expressions to unsafe_validation.rs, replace vec tracking of child exprs with inline macro, add debug assert to ensure tracked children match walked children exactly
* Add HighlightTag::Operator, use it for unsafe deref. Move unsafe validation ↵Paul Daniel Faria2020-06-274-48/+69
| | | | to its own file
* Track expr parents during lowering, use parent map when checking if unsafe ↵Paul Daniel Faria2020-06-272-12/+12
| | | | exprs are within unsafe blocks
* Address review comments, have MissingUnsafe diagnostic point to each unsafe ↵Paul Daniel Faria2020-06-273-25/+19
| | | | use, update tests
* Rename Expr::UnsafeBlock to Expr::UnsafePaul Daniel Faria2020-06-272-2/+2
|
* Track unsafe blocks, don't trigger missing unsafe diagnostic when unsafe ↵Paul Daniel Faria2020-06-274-16/+72
| | | | exprs within unsafe block
* Add missing self param to testPaul Daniel Faria2020-06-271-1/+1
|
* Remove UnnecessaryUnsafe diagnostic, Fix Expr::Call unsafe analysisPaul Daniel Faria2020-06-273-69/+21
|
* Add tests covering unsafe blocks, more attempts to get call expr tests passingPaul Daniel Faria2020-06-272-1/+86
|
* Move diagnostics back into expr, add tests for diagnostics, fix logic to ↵Paul Daniel Faria2020-06-274-20/+154
| | | | account for derefs of raw ptrs
* Add unsafe diagnostics and unsafe highlightingPaul Daniel Faria2020-06-272-1/+81
|
* Merge #4982bors[bot]2020-06-275-39/+107
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4982: Bump chalk r=matklad a=lnicola This passes the tests, but fails in a weird way on `analysis-stats`: ``` thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /home/me/.cargo/registry/src/github.com-1ecc6299db9ec823/chalk-solve-0.14.0/src/clauses/builtin_traits/fn_family.rs:96:20 stack backtrace: 0: backtrace::backtrace::libunwind::trace at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/libunwind.rs:86 1: backtrace::backtrace::trace_unsynchronized at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/mod.rs:66 2: std::sys_common::backtrace::_print_fmt at src/libstd/sys_common/backtrace.rs:78 3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt at src/libstd/sys_common/backtrace.rs:59 4: core::fmt::write at src/libcore/fmt/mod.rs:1076 5: std::io::Write::write_fmt at src/libstd/io/mod.rs:1537 6: std::sys_common::backtrace::_print at src/libstd/sys_common/backtrace.rs:62 7: std::sys_common::backtrace::print at src/libstd/sys_common/backtrace.rs:49 8: std::panicking::default_hook::{{closure}} at src/libstd/panicking.rs:198 9: std::panicking::default_hook at src/libstd/panicking.rs:218 10: std::panicking::rust_panic_with_hook at src/libstd/panicking.rs:477 11: rust_begin_unwind at src/libstd/panicking.rs:385 12: core::panicking::panic_fmt at src/libcore/panicking.rs:86 13: core::panicking::panic at src/libcore/panicking.rs:51 14: chalk_solve::clauses::builtin_traits::fn_family::add_fn_trait_program_clauses 15: chalk_solve::clauses::builder::ClauseBuilder<I>::push_binders 16: chalk_solve::clauses::program_clauses_that_could_match 17: chalk_solve::clauses::program_clauses_for_goal 18: chalk_solve::recursive::Solver<I>::solve_new_subgoal 19: <chalk_solve::recursive::Solver<I> as chalk_solve::recursive::solve::SolveDatabase<I>>::solve_goal 20: chalk_solve::recursive::Solver<I>::solve_root_goal 21: chalk_solve::solve::Solver<I>::solve_limited 22: ra_hir_ty::traits::trait_solve_query 23: salsa::runtime::Runtime<DB>::execute_query_implementation 24: salsa::derived::slot::Slot<DB,Q,MP>::read_upgrade 25: salsa::derived::slot::Slot<DB,Q,MP>::read 26: <salsa::derived::DerivedStorage<DB,Q,MP> as salsa::plumbing::QueryStorageOps<DB,Q>>::try_fetch 27: salsa::QueryTable<DB,Q>::get 28: <T as ra_hir_ty::db::HirDatabase>::trait_solve 29: ra_hir_ty::infer::InferenceContext::resolve_ty_as_possible 30: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_inner 31: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_coerce 32: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::check_call_arguments 33: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_method_call 34: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_inner 35: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr 36: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_method_call 37: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_inner 38: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_coerce 39: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_inner 40: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_inner 41: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_coerce 42: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_inner 43: ra_hir_ty::infer::expr::<impl ra_hir_ty::infer::InferenceContext>::infer_expr_coerce 44: ra_hir_ty::infer::infer_query 45: salsa::runtime::Runtime<DB>::execute_query_implementation 46: salsa::derived::slot::Slot<DB,Q,MP>::read_upgrade 47: salsa::derived::slot::Slot<DB,Q,MP>::read 48: <salsa::derived::DerivedStorage<DB,Q,MP> as salsa::plumbing::QueryStorageOps<DB,Q>>::try_fetch 49: ra_hir_ty::db::infer_wait 50: rust_analyzer::cli::analysis_stats::analysis_stats 51: rust_analyzer::main 52: std::rt::lang_start::{{closure}} 53: std::rt::lang_start_internal::{{closure}} at src/libstd/rt.rs:52 54: std::panicking::try::do_call at src/libstd/panicking.rs:297 55: std::panicking::try at src/libstd/panicking.rs:274 56: std::panic::catch_unwind at src/libstd/panic.rs:394 57: std::rt::lang_start_internal at src/libstd/rt.rs:51 58: main 59: __libc_start_main 60: _start note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. ``` It's as if we're returning `None` for a well-known trait that `chalk` asks about. That seems to happen for `Deref`, `CoerceUnsized` and `Try`. r? @flodiebold Co-authored-by: Laurențiu Nicola <[email protected]>
| * Bump chalkLaurențiu Nicola2020-06-265-39/+107
| |
* | Merge #5033bors[bot]2020-06-271-0/+46
|\ \ | | | | | | | | | | | | | | | | | | | | | 5033: Order of glob imports should not affect import shadowing r=Nashenas88 a=Nashenas88 Fixes #5032 Co-authored-by: Paul Daniel Faria <[email protected]>
| * | Split glob import map to per-ns, switch ExprCollector to use a simpler push_resPaul Daniel Faria2020-06-261-0/+46
| | |
* | | Address review commentsJonas Schievink2020-06-261-1/+2
| |/ |/|
* | Infer type for slice wildcard patternsadamrk2020-06-253-2/+34
|/
* Make `iterate_method_candidates` non-genericJonas Schievink2020-06-241-56/+73
|
* Remove file id from item treeJonas Schievink2020-06-241-3/+3
| | | | It's not needed, and `source` is only used by tests anyways
* draw the rest of the owlJonas Schievink2020-06-241-5/+11
|
* Fix string literal inference in matchLaurențiu Nicola2020-06-242-13/+77
|
* Use only one code-path for parsing fixturesAleksey Kladov2020-06-238-2692/+2692
| | | | | This removes leading newlines everywhere, shifting all ranges in tests by one
* Remove RelativePathBuf from fixtureAleksey Kladov2020-06-221-1/+1
| | | | | The paths in fixture are not really relative (the default one is `/main.rs`), so it doesn't make sense to use `RelativePathBuf` here.
* Merge #4947bors[bot]2020-06-204-56/+87
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4947: Replace `impls_in_trait` query with smarter use of `CrateImplDefs` r=matklad a=jonas-schievink `impls_in_trait` was allocating a whopping ~400 MB of RAM when running analysis-stats on r-a itself. Remove it, instead adding a query that computes a summary `CrateImplDefs` map for all transitive dependencies. This can probably still be made more efficient, but this already reduces the peak memory usage by 25% without much performance impact on analysis-stats. **Before**: ``` Total: 34.962107188s, 2083mb allocated 2141mb resident 422mb ImplsForTraitQuery (deps) 250mb CrateDefMapQueryQuery 147mb MacroArgQuery 140mb TraitSolveQuery (deps) 68mb InferQueryQuery (deps) 62mb ImplDatumQuery (deps) ``` **After**: ``` Total: 35.261100358s, 1520mb allocated 1569mb resident 250mb CrateDefMapQueryQuery 147mb MacroArgQuery 144mb TraitSolveQuery (deps) 68mb InferQueryQuery (deps) 61mb ImplDatumQuery (deps) 45mb BodyQuery 45mb ImplDatumQuery ``` Co-authored-by: Jonas Schievink <[email protected]>
| * Recursively compute impl setsJonas Schievink2020-06-191-13/+26
| |
| * Don't include downstream crate in queryJonas Schievink2020-06-191-1/+2
| |
| * Replace `impls_in_trait` with `CrateImplDefs`Jonas Schievink2020-06-194-57/+74
| |
* | Merge #4958bors[bot]2020-06-204-24/+312
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | 4958: Infer FnSig via Fn traits r=flodiebold a=adamrk Addresses https://github.com/rust-analyzer/rust-analyzer/issues/4481. When inferring types check if the callee implements one of the builtin `Fn` traits. Also autoderef the callee before trying to figure out it's `FnSig`. Co-authored-by: adamrk <[email protected]>
| * | Push obligation instead of matching on solutionadamrk2020-06-202-45/+40
| | |
| * | Get Output assoc type by nameadamrk2020-06-201-13/+3
| | |
| * | Add test for dyn Fn Outputadamrk2020-06-201-0/+68
| | |
| * | move tests to ra_hir_tyadamrk2020-06-201-0/+155
| | |
| * | Fixes to callable_sig_from_fn_traitadamrk2020-06-201-65/+65
| | |
| * | Make get_fn_trait a method of FnTraitadamrk2020-06-203-21/+21
| | |