From a27186636d030c847193ab21c59a1857a1e93785 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 12 Nov 2020 12:09:12 +0100 Subject: Fix attachment of inner doc comments --- crates/syntax/src/parsing/text_tree_sink.rs | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'crates/syntax/src/parsing/text_tree_sink.rs') diff --git a/crates/syntax/src/parsing/text_tree_sink.rs b/crates/syntax/src/parsing/text_tree_sink.rs index c1b5f246d..997bc5d28 100644 --- a/crates/syntax/src/parsing/text_tree_sink.rs +++ b/crates/syntax/src/parsing/text_tree_sink.rs @@ -5,6 +5,7 @@ use std::mem; use parser::{ParseError, TreeSink}; use crate::{ + ast, parsing::Token, syntax_node::GreenNode, SmolStr, SyntaxError, @@ -153,24 +154,22 @@ fn n_attached_trivias<'a>( while let Some((i, (kind, text))) = trivias.next() { match kind { - WHITESPACE => { - if text.contains("\n\n") { - // we check whether the next token is a doc-comment - // and skip the whitespace in this case - if let Some((peek_kind, peek_text)) = - trivias.peek().map(|(_, pair)| pair) - { - if *peek_kind == COMMENT - && peek_text.starts_with("///") - && !peek_text.starts_with("////") - { - continue; - } + WHITESPACE if text.contains("\n\n") => { + // we check whether the next token is a doc-comment + // and skip the whitespace in this case + if let Some((COMMENT, peek_text)) = trivias.peek().map(|(_, pair)| pair) { + let comment_kind = ast::CommentKind::from_text(peek_text); + if comment_kind.doc == Some(ast::CommentPlacement::Outer) { + continue; } - break; } + break; } COMMENT => { + let comment_kind = ast::CommentKind::from_text(text); + if comment_kind.doc == Some(ast::CommentPlacement::Inner) { + break; + } res = i + 1; } _ => (), -- cgit v1.2.3