Add semantic highlighting to variable references
This commit is contained in:
parent
3f3de9e2c0
commit
6a9133baff
@ -167,6 +167,7 @@ impl<'a> AnalysisScope<'a> {
|
|||||||
{
|
{
|
||||||
for idx in meta.range.start..=meta.range.end {
|
for idx in meta.range.start..=meta.range.end {
|
||||||
if let Some(token) = self.tokens.get(idx) {
|
if let Some(token) = self.tokens.get(idx) {
|
||||||
|
// dbg!(idx, token);
|
||||||
if pred(&token.token) {
|
if pred(&token.token) {
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
@ -360,6 +361,8 @@ pub fn analyze_block(
|
|||||||
let symbol = scope.state.new_symbol(idx, SemanticKind::Variable);
|
let symbol = scope.state.new_symbol(idx, SemanticKind::Variable);
|
||||||
scope.state.set_symbol(idx, symbol);
|
scope.state.set_symbol(idx, symbol);
|
||||||
scope.variables.insert(named_variable_ref.1.clone(), symbol);
|
scope.variables.insert(named_variable_ref.1.clone(), symbol);
|
||||||
|
|
||||||
|
analyze_expr(context, source_module, expression, scope);
|
||||||
}
|
}
|
||||||
mir::StmtKind::Set(lhs, rhs) => {
|
mir::StmtKind::Set(lhs, rhs) => {
|
||||||
analyze_expr(context, source_module, lhs, scope);
|
analyze_expr(context, source_module, lhs, scope);
|
||||||
@ -395,7 +398,18 @@ pub fn analyze_expr(
|
|||||||
);
|
);
|
||||||
|
|
||||||
match &expr.0 {
|
match &expr.0 {
|
||||||
mir::ExprKind::Variable(_) => {}
|
mir::ExprKind::Variable(var_ref) => {
|
||||||
|
scope.state.init_types(&var_ref.2, Some(var_ref.0.clone()));
|
||||||
|
|
||||||
|
let idx = scope.token_idx(&var_ref.2, |t| matches!(t, Token::Identifier(_)));
|
||||||
|
let symbol = if let Some(symbol_id) = scope.variables.get(&var_ref.1) {
|
||||||
|
*symbol_id
|
||||||
|
} else {
|
||||||
|
scope.state.new_symbol(idx, SemanticKind::Variable)
|
||||||
|
};
|
||||||
|
scope.state.set_symbol(idx, symbol);
|
||||||
|
scope.variables.insert(var_ref.1.clone(), symbol);
|
||||||
|
}
|
||||||
mir::ExprKind::Indexed(value, _, index_expr) => {
|
mir::ExprKind::Indexed(value, _, index_expr) => {
|
||||||
analyze_expr(context, source_module, &value, scope);
|
analyze_expr(context, source_module, &value, scope);
|
||||||
analyze_expr(context, source_module, &index_expr, scope);
|
analyze_expr(context, source_module, &index_expr, scope);
|
||||||
|
Loading…
Reference in New Issue
Block a user