diff --git a/kclvm/sema/src/advanced_resolver/node.rs b/kclvm/sema/src/advanced_resolver/node.rs index e58aa43fd..d061b38dd 100644 --- a/kclvm/sema/src/advanced_resolver/node.rs +++ b/kclvm/sema/src/advanced_resolver/node.rs @@ -11,7 +11,7 @@ use crate::{ core::{ scope::LocalSymbolScopeKind, symbol::{ - CommentSymbol, DecoratorSymbol, ExpressionSymbol, Symbol, SymbolHint, SymbolHintKind, + CommentOrDocSymbol, DecoratorSymbol, ExpressionSymbol, Symbol, SymbolHint, SymbolHintKind, SymbolRef, SymbolSemanticInfo, UnresolvedSymbol, ValueSymbol, }, }, @@ -308,6 +308,17 @@ impl<'ctx> MutSelfTypedResultWalker<'ctx> for AdvancedResolver<'ctx> { } last_end_pos = index_signature.get_end_pos(); } + + if let Some(doc) = &schema_stmt.doc { + let (start, end) = doc.get_span_pos(); + let comment_symbol = CommentOrDocSymbol::new(start, end, doc.node.clone()); + self.gs.get_symbols_mut().alloc_comment_symbol( + comment_symbol, + self.ctx.get_node_key(&self.ctx.cur_node), + self.ctx.current_pkgpath.clone().unwrap(), + ); + } + for stmt in schema_stmt.body.iter() { if let Some(attribute_symbol) = self.stmt(&stmt)? { let name = self @@ -860,7 +871,7 @@ impl<'ctx> MutSelfTypedResultWalker<'ctx> for AdvancedResolver<'ctx> { fn walk_comment(&mut self, comment: &'ctx ast::Comment) -> Self::Result { let (start, end) = (self.ctx.start_pos.clone(), self.ctx.end_pos.clone()); - let comment_symbol = CommentSymbol::new(start, end, comment.text.clone()); + let comment_symbol = CommentOrDocSymbol::new(start, end, comment.text.clone()); Ok(self.gs.get_symbols_mut().alloc_comment_symbol( comment_symbol, self.ctx.get_node_key(&self.ctx.cur_node), diff --git a/kclvm/sema/src/core/symbol.rs b/kclvm/sema/src/core/symbol.rs index 16704f7e8..2c8583d69 100644 --- a/kclvm/sema/src/core/symbol.rs +++ b/kclvm/sema/src/core/symbol.rs @@ -71,7 +71,7 @@ pub struct SymbolData { pub(crate) unresolved: Arena, pub(crate) rules: Arena, pub(crate) exprs: Arena, - pub(crate) comments: Arena, + pub(crate) comments: Arena, pub(crate) decorators: Arena, pub(crate) functions: Arena, @@ -792,7 +792,7 @@ impl SymbolData { pub fn alloc_comment_symbol( &mut self, - comment: CommentSymbol, + comment: CommentOrDocSymbol, node_key: NodeKey, pkg_name: String, ) -> Option { @@ -2087,7 +2087,7 @@ impl ExpressionSymbol { } #[derive(Debug, Clone)] -pub struct CommentSymbol { +pub struct CommentOrDocSymbol { pub(crate) id: Option, pub(crate) start: Position, pub(crate) end: Position, @@ -2095,7 +2095,7 @@ pub struct CommentSymbol { pub(crate) sema_info: SymbolSemanticInfo, } -impl Symbol for CommentSymbol { +impl Symbol for CommentOrDocSymbol { type SymbolData = SymbolData; type SemanticInfo = SymbolSemanticInfo; type SymbolHint = SymbolHint; @@ -2183,7 +2183,7 @@ impl Symbol for CommentSymbol { } } -impl CommentSymbol { +impl CommentOrDocSymbol { pub fn new(start: Position, end: Position, content: String) -> Self { Self { id: None, diff --git a/kclvm/tools/src/LSP/src/completion.rs b/kclvm/tools/src/LSP/src/completion.rs index 288d15e18..4179543f5 100644 --- a/kclvm/tools/src/LSP/src/completion.rs +++ b/kclvm/tools/src/LSP/src/completion.rs @@ -2048,4 +2048,13 @@ mod tests { 2, Some('.') ); + + + completion_label_test_snapshot!( + func_doc_completion, + "src/test_data/completion_test/schema_doc/schema_doc.k", + 7, + 14, + Some('.') + ); } diff --git a/kclvm/tools/src/LSP/src/snapshots/kcl_language_server__completion__tests__func_doc_completion.snap b/kclvm/tools/src/LSP/src/snapshots/kcl_language_server__completion__tests__func_doc_completion.snap new file mode 100644 index 000000000..f9d531ae0 --- /dev/null +++ b/kclvm/tools/src/LSP/src/snapshots/kcl_language_server__completion__tests__func_doc_completion.snap @@ -0,0 +1,5 @@ +--- +source: tools/src/LSP/src/completion.rs +expression: "format!(\"{:?}\", got_labels)" +--- +[] diff --git a/kclvm/tools/src/LSP/src/test_data/completion_test/schema_doc/schema_doc.k b/kclvm/tools/src/LSP/src/test_data/completion_test/schema_doc/schema_doc.k new file mode 100644 index 000000000..810a02ec6 --- /dev/null +++ b/kclvm/tools/src/LSP/src/test_data/completion_test/schema_doc/schema_doc.k @@ -0,0 +1,14 @@ +schema Name: + """ + + + Attributes + ---------- + name: str + + Examples + -------- + """ + name: str + +# aaax \ No newline at end of file