Paul Daniel Faria
68a649d547
Simplify unsafe expr collection match
2020-06-27 12:00:46 -04:00
Paul Daniel Faria
b7e25ba854
Improve perf of finding unsafe exprs
2020-06-27 11:55:54 -04:00
Paul Daniel Faria
b1992b469c
Remove unneeded code, filename from tests, fix rebasing issues
2020-06-27 11:38:34 -04:00
Paul Daniel Faria
2fc92fa28c
Remove track_parent and parent_map, replace with simple walk in missign unsafe validator
2020-06-27 10:13:14 -04:00
Paul Daniel Faria
2608a6fd3a
unsafe: Clean up, improve tracking, add debug_assert
...
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
2020-06-27 10:13:14 -04:00
Paul Daniel Faria
f678e0d837
Add HighlightTag::Operator, use it for unsafe deref. Move unsafe validation to its own file
2020-06-27 10:13:14 -04:00
Paul Daniel Faria
7f2219dc76
Track expr parents during lowering, use parent map when checking if unsafe exprs are within unsafe blocks
2020-06-27 10:10:26 -04:00
Paul Daniel Faria
9ce44be2ab
Address review comments, have MissingUnsafe diagnostic point to each unsafe use, update tests
2020-06-27 10:10:26 -04:00
Paul Daniel Faria
b9569886a9
Rename Expr::UnsafeBlock to Expr::Unsafe
2020-06-27 10:10:26 -04:00
Paul Daniel Faria
278cbf12cd
Track unsafe blocks, don't trigger missing unsafe diagnostic when unsafe exprs within unsafe block
2020-06-27 10:10:26 -04:00
Paul Daniel Faria
3df0f9ce7e
Add missing self param to test
2020-06-27 10:09:42 -04:00
Paul Daniel Faria
499d4c454d
Remove UnnecessaryUnsafe diagnostic, Fix Expr::Call unsafe analysis
2020-06-27 10:09:42 -04:00
Paul Daniel Faria
b358fbfdf8
Add tests covering unsafe blocks, more attempts to get call expr tests passing
2020-06-27 10:09:29 -04:00
Paul Daniel Faria
daf1cac9f8
Move diagnostics back into expr, add tests for diagnostics, fix logic to account for derefs of raw ptrs
2020-06-27 10:09:29 -04:00
Paul Daniel Faria
0b95bed83f
Add unsafe diagnostics and unsafe highlighting
2020-06-27 10:08:14 -04:00
bors[bot]
18a6dd4635
Merge #4982
...
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 <lnicola@dend.ro>
2020-06-27 09:50:08 +00:00
bors[bot]
656cbc68a1
Merge #5033
...
5033: Order of glob imports should not affect import shadowing r=Nashenas88 a=Nashenas88
Fixes #5032
Co-authored-by: Paul Daniel Faria <Nashenas88@users.noreply.github.com>
2020-06-27 02:51:54 +00:00
Paul Daniel Faria
76755ce176
Split glob import map to per-ns, switch ExprCollector to use a simpler push_res
2020-06-26 11:11:51 -04:00
Jonas Schievink
c441306427
Address review comments
2020-06-26 12:04:11 +02:00
Laurențiu Nicola
7e104ea4a8
Bump chalk
2020-06-26 13:00:55 +03:00
adamrk
0ebc24043b
Infer type for slice wildcard patterns
2020-06-25 23:16:58 +02:00
Jonas Schievink
cefb2204cb
Make iterate_method_candidates
non-generic
2020-06-24 17:45:38 +02:00
Jonas Schievink
16fd4dabb7
Remove file id from item tree
...
It's not needed, and `source` is only used by tests anyways
2020-06-24 16:53:56 +02:00
Jonas Schievink
4b03b39d5b
draw the rest of the owl
2020-06-24 16:53:16 +02:00
Laurențiu Nicola
2bd9f0f020
Fix string literal inference in match
2020-06-24 13:20:06 +03:00
Aleksey Kladov
d016cb4867
Use only one code-path for parsing fixtures
...
This removes leading newlines everywhere, shifting all ranges in tests
by one
2020-06-24 00:48:38 +02:00
Aleksey Kladov
6a6098d4c3
Remove RelativePathBuf from fixture
...
The paths in fixture are not really relative (the default one is
`/main.rs`), so it doesn't make sense to use `RelativePathBuf` here.
2020-06-23 00:14:44 +02:00
bors[bot]
04d64267de
Merge #4947
...
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 <jonasschievink@gmail.com>
2020-06-20 22:14:21 +00:00
bors[bot]
c8557b91a3
Merge #4958
...
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 <ark.email@gmail.com>
2020-06-20 15:10:35 +00:00
adamrk
1629fb770e
Push obligation instead of matching on solution
2020-06-20 17:00:57 +02:00
adamrk
d8f5192d99
Get Output assoc type by name
2020-06-20 11:53:55 +02:00
adamrk
f07338bae2
Add test for dyn Fn Output
2020-06-20 11:43:40 +02:00
adamrk
436dcd9656
move tests to ra_hir_ty
2020-06-20 11:32:01 +02:00
adamrk
f0c8058f12
Fixes to callable_sig_from_fn_trait
2020-06-20 11:04:46 +02:00
adamrk
38f6cdbc8a
Make get_fn_trait a method of FnTrait
2020-06-20 08:42:35 +02:00
adamrk
cf870af807
Switch back callable_sig for known fn types
2020-06-20 08:26:31 +02:00
Jonas Schievink
a3c2f5126f
Recursively compute impl sets
2020-06-20 00:36:02 +02:00
adamrk
3f94a90c7b
Infer FnSig from Fn traits
2020-06-19 22:51:25 +02:00
Jonas Schievink
aa8442af70
Don't include downstream crate in query
2020-06-19 22:33:13 +02:00
Florian Diebold
170cdf9076
Shift bound variables correctly when using assoc type shorthand
...
Fixes #4885 .
Fixes #4800 .
2020-06-19 22:07:58 +02:00
Florian Diebold
2745cb37c1
Use correct substs for super trait assoc types
...
When referring to an associated type of a super trait, we used the substs of the
subtrait. That led to the #4931 crash if the subtrait had less parameters, but
it could also lead to other incorrectness if just the order was different.
Fixes #4931 .
2020-06-19 21:46:47 +02:00
Vincent Rouillé
c95bb0ba7b
Fix substs in resolve_value_path for ImplSelf
...
Fixes #4953 .
2020-06-19 20:33:04 +02:00
bors[bot]
90a5c4626a
Merge #4851
...
4851: Add quickfix to add a struct field r=TimoFreiberg a=TimoFreiberg
Related to #4563
I created a quickfix for record literals first because the NoSuchField diagnostic was already there.
To offer that quickfix for FieldExprs with unknown fields I'd need to add a new diagnostic (or create a `NoSuchField` diagnostic for those cases)
I think it'd make sense to make this a snippet completion (to select the generated type), but this would require changing the `Analysis` API and I'd like some feedback before I touch that.
Co-authored-by: Timo Freiberg <timo.freiberg@gmail.com>
2020-06-19 15:08:52 +00:00
bors[bot]
4575c38810
Merge #4839
...
4839: `Go to Type Definition` hover action. r=matklad a=vsrs
![hover_actions_goto](https://user-images.githubusercontent.com/62505555/83335671-0122e380-a2b7-11ea-9922-fbdcfb11a7f3.gif )
This implementation supports things like `dyn Trait<SomeType>`, `-> impl Trait`, etc.
Co-authored-by: vsrs <vit@conrlab.com>
2020-06-19 13:34:24 +00:00
Jonas Schievink
ebd8233b3e
Replace impls_in_trait
with CrateImplDefs
2020-06-19 01:29:34 +02:00
vsrs
022fbefffa
Apply suggestions from code review
2020-06-18 10:15:43 +03:00
vsrs
4b07c1e775
Add Type::walk method
2020-06-18 10:15:43 +03:00
vsrs
c50157f330
Add Go to Type Definition
hover action.
2020-06-18 10:15:43 +03:00
Jonas Schievink
4d6d7aec50
Avoid all unchecked indexing in match checking
2020-06-17 21:41:07 +02:00
Jonas Schievink
d8af7983b1
Use ra_fixture and reformat tests
2020-06-16 22:54:41 +02:00
Jonas Schievink
9ecbadcedb
Fix index-out-of-bounds panic in match checking
2020-06-16 22:45:34 +02:00
Jonas Schievink
4ebafb9005
_match.rs: improve comment formatting
2020-06-14 15:56:02 +02:00
Timo Freiberg
f5ac313000
Add quickfix to add a struct field
2020-06-12 18:52:44 +02:00
Jonas Schievink
90331ea035
Make known paths use core
instead of std
2020-06-11 16:23:20 +02:00
Aleksey Kladov
d8a5d39c2d
Make relevant_crates return a Set
2020-06-11 11:30:06 +02:00
Florian Diebold
d66daee849
Clean up handling of int/float literal types
...
'Unknown' int/float types actually never exist as such, they get replaced by
type variables immediately. So the whole `Uncertain<IntTy>` thing was
unnecessary and just led to a bunch of match branches that were never hit.
2020-06-06 17:52:00 +02:00
Florian Diebold
a4a4a1854e
Fix type parameter defaults
...
They should not be applied in expression or pattern contexts, unless there are
other explicitly given type args.
2020-06-05 20:09:13 +02:00
bors[bot]
02f7b5d7ab
Merge #4761
...
4761: Upgrade Chalk to published version r=matklad a=flodiebold
CC @pksunkara
Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
2020-06-05 16:05:06 +00:00
bors[bot]
2a3ab7f3b4
Merge #4689
...
4689: Implement return position impl trait / opaque type support r=matklad a=flodiebold
This is working, but I'm not that happy with how the lowering works. We might need an additional representation between `TypeRef` and `Ty` where names are resolved and `impl Trait` bounds are separated out, but things like inference variables don't exist and `impl Trait` is always represented the same way.
Also note that this doesn't implement correct handling of RPIT *inside* the function (which involves turning the `impl Trait`s into variables and creating obligations for them). That intermediate representation might help there as well.
Co-authored-by: Florian Diebold <flodiebold@gmail.com>
Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
2020-06-05 15:46:28 +00:00
Florian Diebold
0d2328f3ea
Review fixes
2020-06-05 17:41:58 +02:00
Aleksey Kladov
bbb40d7463
Minimize FileLoader interface
2020-06-05 17:22:56 +02:00
Florian Diebold
02962b374e
Implement return position impl trait / opaque type support
...
This is working, but I'm not that happy with how the lowering works. We might
need an additional representation between `TypeRef` and `Ty` where names are
resolved and `impl Trait` bounds are separated out, but things like inference
variables don't exist and `impl Trait` is always represented the same
way.
Also note that this doesn't implement correct handling of RPIT *inside* the
function (which involves turning the `impl Trait`s into variables and creating
obligations for them). That intermediate representation might help there as
well.
2020-06-05 17:08:27 +02:00
Florian Diebold
69854f7795
Upgrade Chalk to published version
2020-06-05 17:06:07 +02:00
Aleksey Kladov
bba374bab2
More direct signature for resolve_path
2020-06-05 15:07:30 +02:00
Aleksey Kladov
e63c00f100
Rename resolve_relative_path -> resolve_path
...
For things like `concant!(env!("OUT_DIR"))`, we need to support abs paths
2020-06-05 14:58:30 +02:00
robojumper
1cd78a3355
correctly infer labelled breaks
2020-05-31 11:40:18 +02:00
robojumper
fb469c3b31
labelled break test
2020-05-31 11:24:53 +02:00
bors[bot]
11f74f2827
Merge #4653
...
4653: Fix match ergonomics in closure parameters r=matklad a=flodiebold
Fixes #4476 .
Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
2020-05-30 07:52:07 +00:00
bors[bot]
f7f01dd5f0
Merge #4651
...
4651: Use first match branch in case of type mismatch, not last r=kjeremy a=flodiebold
The comment says this was intentional, but I do agree with #4304 that it makes
more sense the other way around (for if/else as well).
Fixes #4304 .
Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
2020-05-29 21:07:43 +00:00
bors[bot]
3689c8c3f6
Merge #4652
...
4652: Upgrade Chalk r=kjeremy a=flodiebold
Fixes #4072 .
Co-authored-by: Florian Diebold <florian.diebold@freiheit.com>
2020-05-29 19:33:52 +00:00
Florian Diebold
6f67a46a6a
Fix match ergonomics in closure parameters
...
Fixes #4476 .
2020-05-29 17:36:43 +02:00
Florian Diebold
ab28f6c249
Upgrade Chalk
...
Fixes #4072 .
2020-05-29 16:49:52 +02:00
Florian Diebold
7d0586cb15
Use first match branch in case of type mismatch, not last
...
The comment says this was intentional, but I do agree with #4304 that it makes
more sense the other way around (for if/else as well).
Fixes #4304 .
2020-05-29 16:04:56 +02:00
robojumper
367487fe88
Support raw_ref_op's raw reference operator
2020-05-28 21:42:22 +02:00
bors[bot]
fc29d0e924
Merge #4641
...
4641: Upgrade Chalk r=matklad a=flodiebold
Chalk newly added TypeName::Never and Array; I implemented the conversion for
Never, but not Array since that expects a const argument.
Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2020-05-28 09:34:33 +00:00
Florian Diebold
c8a4bb1445
Upgrade Chalk
...
Chalk newly added TypeName::Never and Array; I implemented the conversion for
Never, but not Array since that expects a const argument.
2020-05-27 21:07:08 +02:00
Cadu
c011f04f55
Fixed missing newline on each field on "Missing structure fields".
2020-05-27 13:15:19 -03:00
Jeremy Kolb
a5cc9a8a9b
Fix some clippy perf warnings
2020-05-25 13:35:52 -04:00
Florian Diebold
194dd9eb0d
Use Chalk's Ty::Function for function pointer types
...
Function pointers can be 'higher-ranked' over lifetimes, which is why they're
not an application type in Chalk, but since we don't model lifetimes it doesn't
matter for us yet.
2020-05-22 21:05:28 +02:00
Florian Diebold
bfbc210bc1
Use Chalk's built-in representation of function item types
2020-05-22 21:05:13 +02:00
Florian Diebold
ea265aad64
Provide missing Chalk debug methods
2020-05-22 19:52:06 +02:00
Florian Diebold
27fe68ad5c
Use TypeCtorId as AdtId directly, and rename the type alias StructId -> AdtId
2020-05-22 19:52:06 +02:00
Florian Diebold
1d0e27254d
Split up chalk module a bit
2020-05-22 19:52:06 +02:00
Florian Diebold
e0f978018a
Add some tests for Chalk built-in trait impls
2020-05-22 18:52:07 +02:00
Florian Diebold
02c2beaa8c
Provide Chalk well-known traits
2020-05-22 17:32:49 +02:00
Florian Diebold
e81c76a95a
Use Chalk's built-in representations of primitive types
...
For references, we make sure Chalk actually gets a lifetime here.
2020-05-22 17:32:49 +02:00
Florian Diebold
06ed140fc7
Update Chalk
...
As always, this just makes compilation work, we don't use the newly available
functionality yet.
2020-05-22 16:40:42 +02:00
Aleksey Kladov
ecac5d7de2
Switch to new magic marks
2020-05-20 13:02:53 +02:00
Roland Ruckerbauer
45021cae55
Apply suggestion of @flodiebold: Get rid of multiple unwraps
2020-05-19 22:53:19 +02:00
Roland Ruckerbauer
da09f96746
loop return value inference: add tests
2020-05-19 21:52:43 +02:00
Roland Ruckerbauer
6e36ad3d91
Move false negative expr_diverges_missing_arm() to working tests
2020-05-19 21:18:43 +02:00
Roland Ruckerbauer
6eaa669da0
loop return value inference: coerce_merge branches
2020-05-19 21:06:47 +02:00
Roland Ruckerbauer
0fe876925e
Infer return type of loops with value breaks.
2020-05-18 23:39:10 +02:00
bors[bot]
9bdedbbcaf
Merge #4497
...
4497: Create LowerCtx on the fly r=matklad a=edwin0cheng
Previously we create `LowerCtx` at the beginning of lowering, however, the hygiene content is in fact changing between macro expression expanding.
This PR change it to create the `LowerCtx` on the fly to fix above bug.
However, #4465 is not fixed by this PR, the goto-def is still not work yet. It only fixed the infer part.
Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2020-05-18 11:03:44 +00:00
Hrvoje Ban
68db49c853
Add more tests for Fn traits
2020-05-18 08:07:31 +02:00
Edwin Cheng
12a3bf3c31
Create LowerCtx on the fly
2020-05-17 23:37:30 +08:00
Florian Diebold
811d25b723
Allow calling dyn trait super trait methods without the super trait in scope
...
This also removes some vestiges of the old impl trait support which I think
aren't currently in use.
2020-05-16 18:37:05 +02:00
Florian Diebold
050601ef7b
Chalk upgrade
2020-05-16 11:43:48 +02:00
Florian Diebold
3f42b2e837
Handle Self
in values and patterns
...
I.e.
- `Self(x)` or `Self` in tuple/unit struct impls
- `Self::Variant(x)` or `Self::Variant` in enum impls
- the same in patterns
Fixes #4454 .
2020-05-15 17:25:28 +02:00
Fedor Sakharov
12bf008ab1
Adds a param_idx helper
2020-05-14 13:47:36 +03:00