simplify suggestions ordering

This commit is contained in:
Joeri Exelmans 2025-05-20 16:53:04 +02:00
parent fdbf43a4e9
commit bb6e742f5f
8 changed files with 109 additions and 110 deletions

View file

@ -2,7 +2,7 @@ import { useContext } from "react";
import { ExprBlock, type ExprBlockState } from "./ExprBlock";
import { EnvContext } from "./EnvContext";
import { evalEditorBlock, makeInnerEnv, scoreResolved, type ResolvedType } from "./eval";
import { evalExprBlock, makeInnerEnv, scoreResolved, type ResolvedType } from "./eval";
import { type State2Props } from "./ExprBlock";
import { GlobalContext } from "./GlobalContext";
@ -17,7 +17,7 @@ export interface LetInBlockState {
inner: ExprBlockState;
}
interface LetInBlockProps extends State2Props<LetInBlockState,ExprBlockState> {
export interface LetInBlockProps extends State2Props<LetInBlockState,ExprBlockState> {
}
export function LetInBlock(props: LetInBlockProps) {
@ -31,7 +31,7 @@ export function LetInBlock(props: LetInBlockProps) {
</span>
}
function DeclColumns({state: {name, value, inner, focus}, setState, suggestionPriority}) {
function DeclColumns({state: {name, value, inner, focus}, setState, score}) {
const env = useContext(EnvContext);
const globalContext = useContext(GlobalContext);
@ -40,11 +40,11 @@ function DeclColumns({state: {name, value, inner, focus}, setState, suggestionPr
const valueSuggestionPriority = (suggestion: ResolvedType) => {
const innerEnv = makeInnerEnv(env, name, suggestion);
const [resolved] = evalEditorBlock(inner, innerEnv);
return scoreResolved(resolved, suggestionPriority);
const [resolved] = evalExprBlock(inner, innerEnv);
return scoreResolved(resolved, score);
};
const [valueResolved] = evalEditorBlock(value, env);
const [valueResolved] = evalExprBlock(value, env);
const innerEnv = makeInnerEnv(env, name, valueResolved);
return <>
@ -65,7 +65,7 @@ function DeclColumns({state: {name, value, inner, focus}, setState, suggestionPr
<ExprBlock
state={value}
setState={setValue}
suggestionPriority={valueSuggestionPriority}
score={valueSuggestionPriority}
onCancel={() => setState(state => state.inner)} // keep inner
/>
</span>
@ -75,18 +75,18 @@ function DeclColumns({state: {name, value, inner, focus}, setState, suggestionPr
<DeclColumns
state={inner}
setState={setInner}
suggestionPriority={suggestionPriority}
score={score}
/>
</EnvContext>
}
</>;
}
function InnerMost({state, setState, suggestionPriority}) {
function InnerMost({state, setState, score}) {
const env = useContext(EnvContext);
const globalContext = useContext(GlobalContext);
const setInner = callback => setState(state => ({...state, inner: callback(state.inner)}));
const [valueResolved] = evalEditorBlock(state.value, env);
const [valueResolved] = evalExprBlock(state.value, env);
const innerEnv = makeInnerEnv(env, state.name, valueResolved);
const onCancel = () => setState(state => state.value);
if (state.inner.kind === "let" && globalContext?.syntacticSugar) {
@ -94,7 +94,7 @@ function InnerMost({state, setState, suggestionPriority}) {
<InnerMost
state={state.inner}
setState={setInner}
suggestionPriority={suggestionPriority}
score={score}
/>
</EnvContext>;
}
@ -103,7 +103,7 @@ function InnerMost({state, setState, suggestionPriority}) {
<ExprBlock
state={state.inner}
setState={setInner}
suggestionPriority={suggestionPriority}
score={score}
onCancel={onCancel} // keep value
/>
</EnvContext>