Skip to content

Commit 4f30a0f

Browse files
committed
support comment without '#' on multi union
1 parent 377f4ea commit 4f30a0f

File tree

5 files changed

+89
-19
lines changed

5 files changed

+89
-19
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
`NEW` Add description to type
2525

26+
`NEW` Support description without '#' on multi union
27+
2628
# 0.5.1
2729

2830
`FIX` Fix issue `emmylua_ls` might not exit in unix.

crates/emmylua_code_analysis/src/compilation/analyzer/doc/infer_type.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::sync::Arc;
22

33
use emmylua_parser::{
4-
LuaAst, LuaAstNode, LuaDocBinaryType, LuaDocDetailOwner, LuaDocFuncType, LuaDocGenericType,
4+
LuaAst, LuaAstNode, LuaDocBinaryType, LuaDocFuncType, LuaDocGenericType,
55
LuaDocMultiLineUnionType, LuaDocObjectFieldKey, LuaDocObjectType, LuaDocStrTplType, LuaDocType,
66
LuaDocUnaryType, LuaDocVariadicType, LuaLiteralToken, LuaSyntaxKind, LuaTypeBinaryOperator,
77
LuaTypeUnaryOperator, LuaVarExpr,
@@ -503,9 +503,10 @@ fn infer_multi_line_union_type(
503503
continue;
504504
};
505505

506-
let description = if let Some(description_text) = field.get_detail_text() {
506+
let description = if let Some(description) = field.get_description() {
507+
let description_text = preprocess_description(&description.get_description_text());
507508
if !description_text.is_empty() {
508-
Some(preprocess_description(&description_text))
509+
Some(description_text)
509510
} else {
510511
None
511512
}

crates/emmylua_parser/src/grammar/doc/test.rs

Lines changed: 71 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ Syntax(Chunk)@0..242
351351
Token(TkEndOfLine)@233..234 "\n"
352352
Token(TkWhitespace)@234..242 " "
353353
"#;
354+
354355
assert_ast_eq!(code, result);
355356
}
356357

@@ -428,7 +429,8 @@ Syntax(Chunk)@0..232
428429
Syntax(TypeLiteral)@94..99
429430
Token(TkString)@94..99 "\"aaa\""
430431
Token(TkWhitespace)@99..100 " "
431-
Token(TkDocDetail)@100..106 "@ 1231"
432+
Syntax(DocDescription)@100..106
433+
Token(TkDocDetail)@100..106 "@ 1231"
432434
Token(TkEndOfLine)@106..107 "\n"
433435
Token(TkWhitespace)@107..115 " "
434436
Token(TkDocContinueOr)@115..119 "---|"
@@ -437,7 +439,8 @@ Syntax(Chunk)@0..232
437439
Syntax(TypeLiteral)@120..125
438440
Token(TkString)@120..125 "\"bbb\""
439441
Token(TkWhitespace)@125..126 " "
440-
Token(TkDocDetail)@126..131 "@ 456"
442+
Syntax(DocDescription)@126..131
443+
Token(TkDocDetail)@126..131 "@ 456"
441444
Token(TkEndOfLine)@131..132 "\n"
442445
Token(TkWhitespace)@132..140 " "
443446
Token(TkDocContinueOr)@140..144 "---|"
@@ -446,7 +449,8 @@ Syntax(Chunk)@0..232
446449
Syntax(TypeLiteral)@145..150
447450
Token(TkString)@145..150 "\"ccc\""
448451
Token(TkWhitespace)@150..151 " "
449-
Token(TkDocDetail)@151..156 "@ 789"
452+
Syntax(DocDescription)@151..156
453+
Token(TkDocDetail)@151..156 "@ 789"
450454
Token(TkEndOfLine)@156..157 "\n"
451455
Token(TkEndOfLine)@157..158 "\n"
452456
Token(TkWhitespace)@158..166 " "
@@ -688,7 +692,8 @@ Syntax(Chunk)@0..256
688692
Syntax(TypeLiteral)@187..192
689693
Token(TkString)@187..192 "\"aaa\""
690694
Token(TkWhitespace)@192..193 " "
691-
Token(TkDocDetail)@193..199 "@ 1231"
695+
Syntax(DocDescription)@193..199
696+
Token(TkDocDetail)@193..199 "@ 1231"
692697
Token(TkEndOfLine)@199..200 "\n"
693698
Token(TkWhitespace)@200..208 " "
694699
Syntax(FuncStat)@208..247
@@ -2121,7 +2126,8 @@ Syntax(Chunk)@0..86
21212126
Syntax(TypeName)@34..40
21222127
Token(TkName)@34..40 "number"
21232128
Token(TkWhitespace)@40..41 " "
2124-
Token(TkDocDetail)@41..49 "# nihao "
2129+
Syntax(DocDescription)@41..49
2130+
Token(TkDocDetail)@41..49 "# nihao "
21252131
Token(TkEndOfLine)@49..50 "\n"
21262132
Token(TkWhitespace)@50..58 " "
21272133
Token(TkDocContinueOr)@58..62 "---|"
@@ -2130,7 +2136,8 @@ Syntax(Chunk)@0..86
21302136
Syntax(TypeName)@63..69
21312137
Token(TkName)@63..69 "string"
21322138
Token(TkWhitespace)@69..70 " "
2133-
Token(TkDocDetail)@70..77 "# wohao"
2139+
Syntax(DocDescription)@70..77
2140+
Token(TkDocDetail)@70..77 "# wohao"
21342141
Token(TkEndOfLine)@77..78 "\n"
21352142
Token(TkWhitespace)@78..86 " "
21362143
"##;
@@ -2163,7 +2170,8 @@ Syntax(Chunk)@0..85
21632170
Syntax(TypeName)@33..39
21642171
Token(TkName)@33..39 "number"
21652172
Token(TkWhitespace)@39..40 " "
2166-
Token(TkDocDetail)@40..48 "# nihao "
2173+
Syntax(DocDescription)@40..48
2174+
Token(TkDocDetail)@40..48 "# nihao "
21672175
Token(TkEndOfLine)@48..49 "\n"
21682176
Token(TkWhitespace)@49..57 " "
21692177
Token(TkDocContinueOr)@57..61 "---|"
@@ -2172,11 +2180,66 @@ Syntax(Chunk)@0..85
21722180
Syntax(TypeName)@62..68
21732181
Token(TkName)@62..68 "string"
21742182
Token(TkWhitespace)@68..69 " "
2175-
Token(TkDocDetail)@69..76 "# wohao"
2183+
Syntax(DocDescription)@69..76
2184+
Token(TkDocDetail)@69..76 "# wohao"
21762185
Token(TkEndOfLine)@76..77 "\n"
21772186
Token(TkWhitespace)@77..85 " "
21782187
"##;
21792188

21802189
assert_ast_eq!(code, result);
21812190
}
2191+
2192+
#[test]
2193+
fn test_multiline_description_union() {
2194+
let code = r#"
2195+
---@return
2196+
---| number # nihao
2197+
--- woyehao
2198+
--- dajiahao
2199+
---| string # wohao
2200+
"#;
2201+
let result = r##"
2202+
Syntax(Chunk)@0..127
2203+
Syntax(Block)@0..127
2204+
Token(TkEndOfLine)@0..1 "\n"
2205+
Token(TkWhitespace)@1..9 " "
2206+
Syntax(Comment)@9..118
2207+
Token(TkDocStart)@9..13 "---@"
2208+
Syntax(DocTagReturn)@13..118
2209+
Token(TkTagReturn)@13..19 "return"
2210+
Token(TkEndOfLine)@19..20 "\n"
2211+
Token(TkWhitespace)@20..28 " "
2212+
Syntax(TypeMultiLineUnion)@28..118
2213+
Token(TkDocContinueOr)@28..32 "---|"
2214+
Token(TkWhitespace)@32..33 " "
2215+
Syntax(DocOneLineField)@33..90
2216+
Syntax(TypeName)@33..39
2217+
Token(TkName)@33..39 "number"
2218+
Token(TkWhitespace)@39..40 " "
2219+
Syntax(DocDescription)@40..90
2220+
Token(TkDocDetail)@40..48 "# nihao "
2221+
Token(TkEndOfLine)@48..49 "\n"
2222+
Token(TkWhitespace)@49..57 " "
2223+
Token(TkNormalStart)@57..62 "--- "
2224+
Token(TkDocDetail)@62..69 "woyehao"
2225+
Token(TkEndOfLine)@69..70 "\n"
2226+
Token(TkWhitespace)@70..78 " "
2227+
Token(TkNormalStart)@78..82 "--- "
2228+
Token(TkDocDetail)@82..90 "dajiahao"
2229+
Token(TkEndOfLine)@90..91 "\n"
2230+
Token(TkWhitespace)@91..99 " "
2231+
Token(TkDocContinueOr)@99..103 "---|"
2232+
Token(TkWhitespace)@103..104 " "
2233+
Syntax(DocOneLineField)@104..118
2234+
Syntax(TypeName)@104..110
2235+
Token(TkName)@104..110 "string"
2236+
Token(TkWhitespace)@110..111 " "
2237+
Syntax(DocDescription)@111..118
2238+
Token(TkDocDetail)@111..118 "# wohao"
2239+
Token(TkEndOfLine)@118..119 "\n"
2240+
Token(TkWhitespace)@119..127 " "
2241+
"##;
2242+
2243+
assert_ast_eq!(code, result);
2244+
}
21822245
}

crates/emmylua_parser/src/grammar/doc/types.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use crate::{
22
grammar::ParseResult,
33
kind::{LuaOpKind, LuaSyntaxKind, LuaTokenKind, LuaTypeBinaryOperator, LuaTypeUnaryOperator},
4+
lexer::LuaDocLexerState,
45
parser::{CompleteMarker, LuaDocParser, MarkerEventContainer},
56
parser_error::LuaParseError,
67
};
78

8-
use super::{expect_token, if_token_bump};
9+
use super::{expect_token, if_token_bump, parse_description};
910

1011
pub fn parse_type(p: &mut LuaDocParser) -> ParseResult {
1112
if p.current_token() == LuaTokenKind::TkDocContinueOr {
@@ -388,7 +389,6 @@ fn parse_suffixed_type(p: &mut LuaDocParser, cm: CompleteMarker) -> ParseResult
388389
}
389390
}
390391

391-
392392
fn parse_multi_line_union_type(p: &mut LuaDocParser) -> ParseResult {
393393
let m = p.mark(LuaSyntaxKind::TypeMultiLineUnion);
394394

@@ -404,9 +404,11 @@ fn parse_one_line_type(p: &mut LuaDocParser) -> ParseResult {
404404
let m = p.mark(LuaSyntaxKind::DocOneLineField);
405405

406406
parse_simple_type(p)?;
407-
if p.current_token() == LuaTokenKind::TkDocDetail {
408-
p.bump();
407+
if p.current_token() != LuaTokenKind::TkDocContinueOr {
408+
p.set_state(LuaDocLexerState::Description);
409+
parse_description(p);
410+
p.set_state(LuaDocLexerState::Normal);
409411
}
410412

411413
Ok(m.complete(p))
412-
}
414+
}

crates/emmylua_parser/src/syntax/node/doc/types.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::{
33
LuaLiteralToken, LuaNameToken, LuaSyntaxKind, LuaSyntaxNode, LuaTokenKind,
44
};
55

6-
use super::{LuaDocDetailOwner, LuaDocObjectField, LuaDocTypeList};
6+
use super::{LuaDocDescription, LuaDocObjectField, LuaDocTypeList};
77

88
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
99
pub enum LuaDocType {
@@ -713,10 +713,12 @@ impl LuaAstNode for LuaDocOneLineField {
713713
}
714714
}
715715

716-
impl LuaDocDetailOwner for LuaDocOneLineField {}
717-
718716
impl LuaDocOneLineField {
719717
pub fn get_type(&self) -> Option<LuaDocType> {
720718
self.child()
721719
}
720+
721+
pub fn get_description(&self) -> Option<LuaDocDescription> {
722+
self.child()
723+
}
722724
}

0 commit comments

Comments
 (0)