aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-02-25 11:42:44 +0000
committerAleksey Kladov <[email protected]>2020-02-25 11:43:08 +0000
commit136151515abffabdedbe0087f8fc21a67c071dc6 (patch)
treee5a076f307ea6653d6168a1102de352a3c544532 /crates
parent1fe48a0115c24240f5a3e1b329e642f18e2715d6 (diff)
Replace generic with a concrete type
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_assists/src/ast_transform.rs25
-rw-r--r--crates/rust-analyzer/src/semantic_tokens.rs2
2 files changed, 14 insertions, 13 deletions
diff --git a/crates/ra_assists/src/ast_transform.rs b/crates/ra_assists/src/ast_transform.rs
index 56b7588ef..c6d15af5f 100644
--- a/crates/ra_assists/src/ast_transform.rs
+++ b/crates/ra_assists/src/ast_transform.rs
@@ -1,7 +1,8 @@
1//! `AstTransformer`s are functions that replace nodes in an AST and can be easily combined. 1//! `AstTransformer`s are functions that replace nodes in an AST and can be easily combined.
2use rustc_hash::FxHashMap; 2use rustc_hash::FxHashMap;
3 3
4use hir::{db::HirDatabase, InFile, PathResolution}; 4use hir::{InFile, PathResolution};
5use ra_ide_db::RootDatabase;
5use ra_syntax::ast::{self, AstNode}; 6use ra_syntax::ast::{self, AstNode};
6 7
7pub trait AstTransform<'a> { 8pub trait AstTransform<'a> {
@@ -33,18 +34,18 @@ impl<'a> AstTransform<'a> for NullTransformer {
33 } 34 }
34} 35}
35 36
36pub struct SubstituteTypeParams<'a, DB: HirDatabase> { 37pub struct SubstituteTypeParams<'a> {
37 db: &'a DB, 38 db: &'a RootDatabase,
38 substs: FxHashMap<hir::TypeParam, ast::TypeRef>, 39 substs: FxHashMap<hir::TypeParam, ast::TypeRef>,
39 previous: Box<dyn AstTransform<'a> + 'a>, 40 previous: Box<dyn AstTransform<'a> + 'a>,
40} 41}
41 42
42impl<'a, DB: HirDatabase> SubstituteTypeParams<'a, DB> { 43impl<'a> SubstituteTypeParams<'a> {
43 pub fn for_trait_impl( 44 pub fn for_trait_impl(
44 db: &'a DB, 45 db: &'a RootDatabase,
45 trait_: hir::Trait, 46 trait_: hir::Trait,
46 impl_block: ast::ImplBlock, 47 impl_block: ast::ImplBlock,
47 ) -> SubstituteTypeParams<'a, DB> { 48 ) -> SubstituteTypeParams<'a> {
48 let substs = get_syntactic_substs(impl_block).unwrap_or_default(); 49 let substs = get_syntactic_substs(impl_block).unwrap_or_default();
49 let generic_def: hir::GenericDef = trait_.into(); 50 let generic_def: hir::GenericDef = trait_.into();
50 let substs_by_param: FxHashMap<_, _> = generic_def 51 let substs_by_param: FxHashMap<_, _> = generic_def
@@ -95,7 +96,7 @@ impl<'a, DB: HirDatabase> SubstituteTypeParams<'a, DB> {
95 } 96 }
96} 97}
97 98
98impl<'a, DB: HirDatabase> AstTransform<'a> for SubstituteTypeParams<'a, DB> { 99impl<'a> AstTransform<'a> for SubstituteTypeParams<'a> {
99 fn get_substitution( 100 fn get_substitution(
100 &self, 101 &self,
101 node: InFile<&ra_syntax::SyntaxNode>, 102 node: InFile<&ra_syntax::SyntaxNode>,
@@ -107,14 +108,14 @@ impl<'a, DB: HirDatabase> AstTransform<'a> for SubstituteTypeParams<'a, DB> {
107 } 108 }
108} 109}
109 110
110pub struct QualifyPaths<'a, DB: HirDatabase> { 111pub struct QualifyPaths<'a> {
111 db: &'a DB, 112 db: &'a RootDatabase,
112 from: Option<hir::Module>, 113 from: Option<hir::Module>,
113 previous: Box<dyn AstTransform<'a> + 'a>, 114 previous: Box<dyn AstTransform<'a> + 'a>,
114} 115}
115 116
116impl<'a, DB: HirDatabase> QualifyPaths<'a, DB> { 117impl<'a> QualifyPaths<'a> {
117 pub fn new(db: &'a DB, from: Option<hir::Module>) -> Self { 118 pub fn new(db: &'a RootDatabase, from: Option<hir::Module>) -> Self {
118 Self { db, from, previous: Box::new(NullTransformer) } 119 Self { db, from, previous: Box::new(NullTransformer) }
119 } 120 }
120 121
@@ -168,7 +169,7 @@ pub fn apply<'a, N: AstNode>(transformer: &dyn AstTransform<'a>, node: InFile<N>
168 N::cast(result).unwrap() 169 N::cast(result).unwrap()
169} 170}
170 171
171impl<'a, DB: HirDatabase> AstTransform<'a> for QualifyPaths<'a, DB> { 172impl<'a> AstTransform<'a> for QualifyPaths<'a> {
172 fn get_substitution( 173 fn get_substitution(
173 &self, 174 &self,
174 node: InFile<&ra_syntax::SyntaxNode>, 175 node: InFile<&ra_syntax::SyntaxNode>,
diff --git a/crates/rust-analyzer/src/semantic_tokens.rs b/crates/rust-analyzer/src/semantic_tokens.rs
index ad000a3ce..e6a8eb146 100644
--- a/crates/rust-analyzer/src/semantic_tokens.rs
+++ b/crates/rust-analyzer/src/semantic_tokens.rs
@@ -49,7 +49,7 @@ pub(crate) fn supported_token_modifiers() -> &'static [SemanticTokenModifier] {
49} 49}
50 50
51/// Tokens are encoded relative to each other. 51/// Tokens are encoded relative to each other.
52/// 52///
53/// This is a direct port of https://github.com/microsoft/vscode-languageserver-node/blob/f425af9de46a0187adb78ec8a46b9b2ce80c5412/server/src/sematicTokens.proposed.ts#L45 53/// This is a direct port of https://github.com/microsoft/vscode-languageserver-node/blob/f425af9de46a0187adb78ec8a46b9b2ce80c5412/server/src/sematicTokens.proposed.ts#L45
54#[derive(Default)] 54#[derive(Default)]
55pub(crate) struct SemanticTokensBuilder { 55pub(crate) struct SemanticTokensBuilder {