feat(els): display type bounds as inlay hints

This commit is contained in:
Shunsuke Shibayama 2023-02-19 02:39:03 +09:00
parent 855d47f02c
commit 7103c9f3bb
6 changed files with 123 additions and 57 deletions

View file

@ -25,7 +25,7 @@ use erg_common::{
use erg_parser::ast::{DefId, DefKind};
use CommonOpcode::*;
use erg_parser::ast::{ParamPattern, VarName};
use erg_parser::ast::{ParamPattern, TypeBoundSpecs, VarName};
use erg_parser::token::DOT;
use erg_parser::token::EQUAL;
use erg_parser::token::{Token, TokenKind};
@ -2798,7 +2798,8 @@ impl PyCodeGenerator {
Params::new(vec![self_param], None, vec![], None),
)
};
let subr_sig = SubrSignature::new(ident, params, sig.t_spec().cloned());
let bounds = TypeBoundSpecs::empty();
let subr_sig = SubrSignature::new(ident, bounds, params, sig.t_spec().cloned());
let mut attrs = vec![];
match new_first_param.map(|pt| pt.typ()) {
// namedtupleは仕様上::xなどの名前を使えない
@ -2874,7 +2875,8 @@ impl PyCodeGenerator {
erg_parser::ast::NonDefaultParamSignature::new(ParamPattern::VarName(param), None);
let param = NonDefaultParamSignature::new(raw, vi, None);
let params = Params::new(vec![param], None, vec![], None);
let sig = SubrSignature::new(ident, params, sig.t_spec().cloned());
let bounds = TypeBoundSpecs::empty();
let sig = SubrSignature::new(ident, bounds, params, sig.t_spec().cloned());
let arg = PosArg::new(Expr::Accessor(Accessor::private_with_line(
Str::from(param_name),
line,
@ -2885,7 +2887,8 @@ impl PyCodeGenerator {
self.emit_subr_def(Some(class_ident.inspect()), sig, body);
} else {
let params = Params::new(vec![], None, vec![], None);
let sig = SubrSignature::new(ident, params, sig.t_spec().cloned());
let bounds = TypeBoundSpecs::empty();
let sig = SubrSignature::new(ident, bounds, params, sig.t_spec().cloned());
let call = class_new.call_expr(Args::new(vec![], None, vec![], None));
let block = Block::new(vec![call]);
let body = DefBody::new(EQUAL, block, DefId(0));