From 26b4b1e2fb06f54e2974835077c2e970b2e0f2b8 Mon Sep 17 00:00:00 2001 From: Dusty Pomerleau Date: Thu, 22 Oct 2020 13:03:04 +1100 Subject: fix: prevent line comments inside block comments - prevent line comments inside block comments - prevent underscore-prefixed functions and macros from receiving comment scope --- editors/code/rust.tmGrammar.json | 53 ++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/editors/code/rust.tmGrammar.json b/editors/code/rust.tmGrammar.json index 3be565195..f0c5c3cf3 100644 --- a/editors/code/rust.tmGrammar.json +++ b/editors/code/rust.tmGrammar.json @@ -24,6 +24,9 @@ } }, "patterns": [ + { + "include": "#block-comments" + }, { "include": "#comments" }, @@ -184,6 +187,9 @@ } }, "patterns": [ + { + "include": "#block-comments" + }, { "include": "#comments" }, @@ -211,6 +217,9 @@ } }, "patterns": [ + { + "include": "#block-comments" + }, { "include": "#comments" }, @@ -231,6 +240,9 @@ } ] }, + { + "include": "#block-comments" + }, { "include": "#comments" }, @@ -277,23 +289,22 @@ { "comment": "documentation comments", "name": "comment.line.documentation.rust", - "match": "^\\s*///.*", - "patterns": [ - { - "include": "#comments" - } - ] + "match": "^\\s*///.*" }, { "comment": "line comments", "name": "comment.line.double-slash.rust", - "match": "\\s*//.*", - "patterns": [ - { - "include": "#comments" - } - ] + "match": "\\s*//.*" }, + { + "comment": "inferred types, wildcard patterns, ignored params", + "name": "comment.char.underscore.rust", + "match": "\\b_\\w*\\b[^!(]" + } + ] + }, + "block-comments": { + "patterns": [ { "comment": "block comments", "name": "comment.block.rust", @@ -301,7 +312,7 @@ "end": "\\*/", "patterns": [ { - "include": "#comments" + "include": "#block-comments" } ] }, @@ -312,14 +323,9 @@ "end": "\\*/", "patterns": [ { - "include": "#comments" + "include": "#block-comments" } ] - }, - { - "comment": "inferred types, wildcard patterns, ignored params", - "name": "comment.char.underscore.rust", - "match": "\\b_\\w*\\b" } ] }, @@ -450,6 +456,9 @@ } }, "patterns": [ + { + "include": "#block-comments" + }, { "include": "#comments" }, @@ -516,6 +525,9 @@ } }, "patterns": [ + { + "include": "#block-comments" + }, { "include": "#comments" }, @@ -797,6 +809,9 @@ } }, "patterns": [ + { + "include": "#block-comments" + }, { "include": "#comments" }, -- cgit v1.2.3 From 68c67efa683bd676096c3a28960f806d4d3dc5d7 Mon Sep 17 00:00:00 2001 From: Zac Pullar-Strecker Date: Thu, 22 Oct 2020 17:31:25 +1300 Subject: Fix opening module documentation opening parent documentation instead The whole path/URL joining code is kind of ugly which is what led to this, but at the same time I don't really want to rewrite it right now... --- crates/ide/src/doc_links.rs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/crates/ide/src/doc_links.rs b/crates/ide/src/doc_links.rs index b9d8b8a2b..250f10f9f 100644 --- a/crates/ide/src/doc_links.rs +++ b/crates/ide/src/doc_links.rs @@ -132,7 +132,8 @@ fn get_doc_link(db: &RootDatabase, definition: Definition) -> Option { let import_map = db.import_map(krate.into()); let base = once(krate.display_name(db)?.to_string()) .chain(import_map.path_of(ns)?.segments.iter().map(|name| name.to_string())) - .join("/"); + .join("/") + + "/"; let filename = get_symbol_filename(db, &target_def); let fragment = match definition { @@ -152,9 +153,16 @@ fn get_doc_link(db: &RootDatabase, definition: Definition) -> Option { _ => None, }; - get_doc_url(db, &krate) - .and_then(|url| url.join(&base).ok()) - .and_then(|url| filename.as_deref().and_then(|f| url.join(f).ok())) + get_doc_url(db, &krate)? + .join(&base) + .ok() + .and_then(|mut url| { + if !matches!(definition, Definition::ModuleDef(ModuleDef::Module(..))) { + url.path_segments_mut().ok()?.pop(); + }; + Some(url) + }) + .and_then(|url| url.join(filename.as_deref()?).ok()) .and_then( |url| if let Some(fragment) = fragment { url.join(&fragment).ok() } else { Some(url) }, ) @@ -522,6 +530,18 @@ pub struct Foo { ); } + #[test] + fn test_module() { + check( + r#" +pub mod foo { + pub mod ba<|>r {} +} + "#, + expect![[r#"https://docs.rs/test/*/test/foo/bar/index.html"#]], + ) + } + // FIXME: ImportMap will return re-export paths instead of public module // paths. The correct path to documentation will never be a re-export. // This problem stops us from resolving stdlib items included in the prelude -- cgit v1.2.3