Skip to content

Commit

Permalink
arch: migrate lsp dot_complete to new sema model (#879)
Browse files Browse the repository at this point in the history
* arch: migrate lsp dot_complete to new sema model

Signed-off-by: he1pa <18012015693@163.com>

* chore: fix some review conversation

Signed-off-by: he1pa <18012015693@163.com>

---------

Signed-off-by: he1pa <18012015693@163.com>
  • Loading branch information
He1pa authored Nov 15, 2023
1 parent cc06b84 commit fe94989
Show file tree
Hide file tree
Showing 14 changed files with 737 additions and 539 deletions.
352 changes: 192 additions & 160 deletions kclvm/sema/src/advanced_resolver/mod.rs

Large diffs are not rendered by default.

70 changes: 63 additions & 7 deletions kclvm/sema/src/advanced_resolver/node.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
use std::sync::Arc;

use indexmap::IndexMap;
use kclvm_ast::ast;
use kclvm_ast::pos::GetPos;
use kclvm_ast::walker::MutSelfTypedResultWalker;
use kclvm_error::diagnostic::Range;
use kclvm_error::{diagnostic::Range, Position};

use crate::core::symbol::{KCLSymbolSemanticInfo, SymbolRef, UnresolvedSymbol, ValueSymbol};
use crate::{
core::symbol::{KCLSymbolSemanticInfo, SymbolRef, UnresolvedSymbol, ValueSymbol},
ty::{Type, SCHEMA_MEMBER_FUNCTIONS},
};

use super::AdvancedResolver;

Expand Down Expand Up @@ -136,13 +142,47 @@ impl<'ctx> MutSelfTypedResultWalker<'ctx> for AdvancedResolver<'ctx> {
.get_symbols()
.get_type_symbol(&schema_ty, self.get_current_module_info())?;

if let Some(symbol) = self
if self
.gs
.get_symbols_mut()
.get_symbols()
.schemas
.get_mut(schema_symbol.get_id())
.contains(schema_symbol.get_id())
{
symbol.sema_info = KCLSymbolSemanticInfo {
let mut schema_builtin_member = IndexMap::new();
for name in SCHEMA_MEMBER_FUNCTIONS.iter() {
let func_ty = Arc::new(Type::function(
Some(schema_ty.clone()),
Type::list_ref(Type::any_ref()),
&[],
"",
false,
None,
));
let mut func_value = ValueSymbol::new(
name.to_string(),
Position::dummy_pos(),
Position::dummy_pos(),
Some(schema_symbol),
false,
);
func_value.sema_info.ty = Some(func_ty);
let func_symbol_ref = self
.gs
.get_symbols_mut()
.alloc_value_symbol(func_value, &ast::AstIndex::default());
schema_builtin_member.insert(name.to_string(), func_symbol_ref);
}
self.gs
.get_symbols_mut()
.symbols_info
.schema_builtin_symbols
.insert(schema_symbol, schema_builtin_member);
self.gs
.get_symbols_mut()
.schemas
.get_mut(schema_symbol.get_id())
.unwrap()
.sema_info = KCLSymbolSemanticInfo {
ty: Some(schema_ty.clone()),
doc: schema_stmt.doc.as_ref().map(|doc| doc.node.clone()),
};
Expand Down Expand Up @@ -800,8 +840,24 @@ impl<'ctx> AdvancedResolver<'ctx> {
.symbols_info
.ast_id_map
.get(&identifier.id)
.map(|symbol_ref| *symbol_ref)
{
*identifier_symbol
if let Some(symbol) = self
.gs
.get_symbols_mut()
.values
.get_mut(identifier_symbol.get_id())
{
symbol.sema_info = KCLSymbolSemanticInfo {
ty: self
.ctx
.node_ty_map
.get(&identifier.id)
.map(|ty| ty.clone()),
doc: None,
};
}
identifier_symbol
} else {
self.resolve_names(&identifier.node.names, self.ctx.maybe_def)?
};
Expand Down
14 changes: 12 additions & 2 deletions kclvm/sema/src/core/global_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,20 @@ impl GlobalState {
scope_ref: ScopeRef,
module_info: Option<&ModuleInfo>,
) -> Option<SymbolRef> {
self.scopes.get_scope(scope_ref)?.look_up_def(
match self.scopes.get_scope(scope_ref)?.look_up_def(
name,
&self.scopes,
&self.symbols,
module_info,
)
) {
None => self
.symbols
.symbols_info
.global_builtin_symbols
.get(name)
.cloned(),
some => some,
}
}

/// look up scope by specific position
Expand Down Expand Up @@ -384,6 +392,8 @@ impl GlobalState {
},
);
}
// remove dummy file
file_sema_map.remove("");

for (_, sema_info) in file_sema_map.iter_mut() {
sema_info
Expand Down
4 changes: 4 additions & 0 deletions kclvm/sema/src/core/package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ impl PackageInfo {
pub fn get_kfile_paths(&self) -> &IndexSet<String> {
&self.kfile_paths
}

pub fn get_pkg_filepath(&self) -> &String {
&self.pkg_filepath
}
}
#[allow(unused)]
#[derive(Debug, Clone)]
Expand Down
Loading

0 comments on commit fe94989

Please sign in to comment.