]> git.lizzy.rs Git - rust.git/commitdiff
Code review fixes
authorKirill Bulatov <mail4score@gmail.com>
Mon, 22 Jul 2019 18:52:47 +0000 (21:52 +0300)
committerKirill Bulatov <mail4score@gmail.com>
Mon, 22 Jul 2019 20:25:13 +0000 (23:25 +0300)
crates/ra_ide_api/src/inlay_hints.rs
crates/ra_lsp_server/src/main_loop.rs
crates/ra_lsp_server/src/main_loop/handlers.rs
crates/ra_lsp_server/src/req.rs

index 1b1f28951a7a34bb075ec0286b8c5540403a7bc1..174662beb57b5fe095ea0c3e609f577b41f38190 100644 (file)
@@ -9,16 +9,15 @@
 
 #[derive(Debug, PartialEq, Eq)]
 pub enum InlayKind {
-    LetBinding,
-    ClosureParameter,
+    LetBindingType,
+    ClosureParameterType,
 }
 
 #[derive(Debug)]
 pub struct InlayHint {
     pub range: TextRange,
-    pub text: SmolStr,
-    pub inlay_kind: InlayKind,
-    pub inlay_type_string: SmolStr,
+    pub kind: InlayKind,
+    pub label: SmolStr,
 }
 
 pub(crate) fn inlay_hints(db: &RootDatabase, file_id: FileId, file: &SourceFile) -> Vec<InlayHint> {
@@ -56,9 +55,8 @@ fn get_inlay_hints(
 
             Some(vec![InlayHint {
                 range: pat_range,
-                text: let_syntax.text().to_string().into(),
-                inlay_kind: InlayKind::LetBinding,
-                inlay_type_string,
+                kind: InlayKind::LetBindingType,
+                label: inlay_type_string,
             }])
         })
         .visit(|closure_parameter: ast::LambdaExpr| match closure_parameter.param_list() {
@@ -80,9 +78,8 @@ fn get_inlay_hints(
 
                         Some(InlayHint {
                             range: closure_param_syntax.text_range(),
-                            text: closure_param_syntax.text().to_string().into(),
-                            inlay_kind: InlayKind::ClosureParameter,
-                            inlay_type_string,
+                            kind: InlayKind::ClosureParameterType,
+                            label: inlay_type_string,
                         })
                     })
                     .collect(),
@@ -149,39 +146,33 @@ struct InnerStruct {}
         assert_debug_snapshot_matches!(analysis.inlay_hints(file_id).unwrap(), @r#"[
     InlayHint {
         range: [71; 75),
-        text: "let test = 54;",
-        inlay_kind: LetBinding,
-        inlay_type_string: "i32",
+        kind: LetBindingType,
+        label: "i32",
     },
     InlayHint {
         range: [121; 125),
-        text: "let test = OuterStruct {};",
-        inlay_kind: LetBinding,
-        inlay_type_string: "OuterStruct",
+        kind: LetBindingType,
+        label: "OuterStruct",
     },
     InlayHint {
         range: [297; 305),
-        text: "let mut test = 33;",
-        inlay_kind: LetBinding,
-        inlay_type_string: "i32",
+        kind: LetBindingType,
+        label: "i32",
     },
     InlayHint {
         range: [417; 426),
-        text: "let i_squared = i * i;",
-        inlay_kind: LetBinding,
-        inlay_type_string: "u32",
+        kind: LetBindingType,
+        label: "u32",
     },
     InlayHint {
         range: [496; 502),
-        text: "let (x, c) = (42, \'a\');",
-        inlay_kind: LetBinding,
-        inlay_type_string: "(i32, char)",
+        kind: LetBindingType,
+        label: "(i32, char)",
     },
     InlayHint {
         range: [524; 528),
-        text: "let test = (42, \'a\');",
-        inlay_kind: LetBinding,
-        inlay_type_string: "(i32, char)",
+        kind: LetBindingType,
+        label: "(i32, char)",
     },
 ]"#
         );
index 668d2fd729d6a4298511dbe4f27f44b6923f66c3..8e830c8b8586f9b414142b160e2909f20cca1624 100644 (file)
@@ -362,6 +362,7 @@ fn on_request(
         .on::<req::References>(handlers::handle_references)?
         .on::<req::Formatting>(handlers::handle_formatting)?
         .on::<req::DocumentHighlightRequest>(handlers::handle_document_highlight)?
+        .on::<req::InlayHints>(handlers::handle_inlay_hints)?
         .finish();
     Ok(())
 }
index 68865b755501e2c2774763d8b3de4a1e8e157ed0..5bf950a53780348292a79837b537465c27e93620 100644 (file)
@@ -21,7 +21,7 @@
 use crate::{
     cargo_target_spec::{runnable_args, CargoTargetSpec},
     conv::{to_location, Conv, ConvWith, MapConvWith, TryConvWith, TryConvWithToVec},
-    req::{self, Decoration},
+    req::{self, Decoration, InlayHint, InlayHintsParams, InlayKind},
     world::WorldSnapshot,
     LspError, Result,
 };
@@ -874,3 +874,24 @@ fn to_diagnostic_severity(severity: Severity) -> DiagnosticSeverity {
         WeakWarning => DiagnosticSeverity::Hint,
     }
 }
+
+pub fn handle_inlay_hints(
+    world: WorldSnapshot,
+    params: InlayHintsParams,
+) -> Result<Vec<InlayHint>> {
+    let file_id = params.text_document.try_conv_with(&world)?;
+    let analysis = world.analysis();
+    let line_index = analysis.file_line_index(file_id);
+    Ok(analysis
+        .inlay_hints(file_id)?
+        .into_iter()
+        .map(|api_type| InlayHint {
+            label: api_type.label.to_string(),
+            range: api_type.range.conv_with(&line_index),
+            kind: match api_type.kind {
+                ra_ide_api::InlayKind::LetBindingType => InlayKind::LetBindingType,
+                ra_ide_api::InlayKind::ClosureParameterType => InlayKind::ClosureParameterType,
+            },
+        })
+        .collect())
+}
index 8d39b04a7482e2bcbdb71f1c46c57e0ccc24408b..916185f99d17d99ef6b18133d0a144ee334b86e1 100644 (file)
@@ -196,3 +196,30 @@ pub struct SourceChange {
     pub workspace_edit: WorkspaceEdit,
     pub cursor_position: Option<TextDocumentPositionParams>,
 }
+
+pub enum InlayHints {}
+
+impl Request for InlayHints {
+    type Params = InlayHintsParams;
+    type Result = Vec<InlayHint>;
+    const METHOD: &'static str = "rust-analyzer/inlayHints";
+}
+
+#[derive(Serialize, Deserialize, Debug)]
+#[serde(rename_all = "camelCase")]
+pub struct InlayHintsParams {
+    pub text_document: TextDocumentIdentifier,
+}
+
+#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
+pub enum InlayKind {
+    LetBindingType,
+    ClosureParameterType,
+}
+
+#[derive(Debug, Deserialize, Serialize)]
+pub struct InlayHint {
+    pub range: Range,
+    pub kind: InlayKind,
+    pub label: String,
+}