All checks were successful
Build / build (push) Successful in 22m38s
34 lines
958 B
Markdown
34 lines
958 B
Markdown
|
||
何度目だという[[評価環境]]の実装。
|
||
|
||
モジュールも考慮して、名前空間のOpenとかも含めた評価環境を実装したい。
|
||
|
||
名前の側で正規化するのがいいのか?
|
||
|
||
```rust
|
||
//Environment全体をSlotMapで管理する
|
||
struct Environment<V>{
|
||
namespace:Option<Symbol>
|
||
parent: Option<EnvKey>
|
||
children: Vec<EnvKey>,
|
||
span:Range<u64>,
|
||
binds: Vec<(Symbol,V)>
|
||
}
|
||
```
|
||
|
||
letでスコープを広げたときはnamespaceなしで辿ることにする
|
||
|
||
最終的にはLanguage ServerでSpanからEnvironmentの位置を補足したいということになる。
|
||
|
||
基本的に、子環境のEnvironmentは常に親のEncより狭い範囲のSpanを持つはず。そして子要素同士のSpanは交差しないはず。
|
||
|
||
親から子要素を二分探索で辿って行って(Spanは交差しないからPartialOrdにできるはず)
|
||
|
||
```rust
|
||
fn get_completions(arena:SlotMap<_>,root_env:EnvKey,span:Span){
|
||
|
||
|
||
}
|
||
|
||
|
||
``` |