Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/curly-horses-behave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@marko/language-server": patch
"@marko/language-tools": patch
"@marko/type-check": patch
"marko-vscode": patch
---

Bound values with types
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
## Hovers
### Ln 1, Col 10
```marko
> 1 | oneOrTwo/y
| ^ const y: 1 | 2
2 | // ^?
```

Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
export interface Input {}
(function (this: void) {
const input = Marko._.any as Input;
const $signal = Marko._.any as AbortSignal;
const $global = Marko._.getGlobal(
// @ts-expect-error We expect the compiler to error because we are checking if the MarkoRun.Context is defined.
(Marko._.error, Marko._.any as MarkoRun.Context),
);
const y = Marko._.hoist(() => __marko_internal_hoist__y);
const __marko_internal_tag_1 = Marko._.resolveTemplate(
import("./tags/oneOrTwo.marko"),
);
{
const y = Marko._.returned(() => __marko_internal_rendered_1);
const __marko_internal_rendered_1 = Marko._.renderTemplate(
__marko_internal_tag_1 /*oneOrTwo*/,
)()()({
/*oneOrTwo*/
});
var __marko_internal_hoist__y = y;
}
Marko._.noop({ y, input, $global, $signal });
return;
})();
export default new (class Template extends Marko._.Template<{
render(
input: Marko.TemplateInput<Input>,
stream?: {
write: (chunk: string) => void;
end: (chunk?: string) => void;
},
): Marko.Out<never>;

render(
input: Marko.TemplateInput<Input>,
cb?: (err: Error | null, result: Marko.RenderResult<never>) => void,
): Marko.Out<never>;

renderSync(input: Marko.TemplateInput<Input>): Marko.RenderResult<never>;

renderToString(input: Marko.TemplateInput<Input>): string;

stream(
input: Marko.TemplateInput<Input>,
): ReadableStream<string> & NodeJS.ReadableStream;

mount(
input: Marko.TemplateInput<Input>,
reference: Node,
position?: "afterbegin" | "afterend" | "beforebegin" | "beforeend",
): Marko.MountedTemplate<typeof input>;

api: "tags";
_(): () => <__marko_internal_input extends unknown>(
input: Marko.Directives &
Input &
Marko._.Relate<__marko_internal_input, Marko.Directives & Input>,
) => Marko._.ReturnWithScope<__marko_internal_input, void>;
}> {})();
// ^?
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## Hovers
### Ln 2, Col 10
```marko
1 | <let/x=1/>
> 2 | <return:=x as 1 | 2/>
| ^ const x: number
3 | // ^?
```

Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
export interface Input {}
function __marko_internal_template(this: void) {
const input = Marko._.any as Input;
const $signal = Marko._.any as AbortSignal;
const $global = Marko._.getGlobal(
// @ts-expect-error We expect the compiler to error because we are checking if the MarkoRun.Context is defined.
(Marko._.error, Marko._.any as MarkoRun.Context),
);
const x = Marko._.hoist(() => __marko_internal_hoist__x);
const __marko_internal_tag_1 = Marko._.resolveTemplate(
import("@marko/runtime-tags/tags/let.d.marko"),
);
{
const x = Marko._.returned(() => __marko_internal_rendered_1);
const __marko_internal_rendered_1 = Marko._.renderTemplate(
__marko_internal_tag_1 /*let*/,
)()()({
value: 1,
});
const __marko_internal_change__x = Marko._.change(
"x",
"value",
__marko_internal_rendered_1.return,
);
var __marko_internal_return = Marko._.returnTag({
value: x as 1 | 2,
valueChange(
// @ts-ignore
_x,
) {
__marko_internal_change__x.x = _x;
},
});
var __marko_internal_hoist__x = x;
}
Marko._.noop({ x, input, $global, $signal });
return __marko_internal_return;
}
export default new (class Template extends Marko._.Template<{
render(
input: Marko.TemplateInput<Input>,
stream?: {
write: (chunk: string) => void;
end: (chunk?: string) => void;
},
): Marko.Out<never>;

render(
input: Marko.TemplateInput<Input>,
cb?: (err: Error | null, result: Marko.RenderResult<never>) => void,
): Marko.Out<never>;

renderSync(input: Marko.TemplateInput<Input>): Marko.RenderResult<never>;

renderToString(input: Marko.TemplateInput<Input>): string;

stream(
input: Marko.TemplateInput<Input>,
): ReadableStream<string> & NodeJS.ReadableStream;

mount(
input: Marko.TemplateInput<Input>,
reference: Node,
position?: "afterbegin" | "afterend" | "beforebegin" | "beforeend",
): Marko.MountedTemplate<typeof input>;

api: "tags";
_(): () => <__marko_internal_input extends unknown>(
input: Marko.Directives &
Input &
Marko._.Relate<__marko_internal_input, Marko.Directives & Input>,
) => Marko._.ReturnWithScope<
__marko_internal_input,
typeof __marko_internal_template extends () => infer Return ? Return : never
>;
}> {})();
// ^?
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
oneOrTwo/y
// ^?
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<let/x=1/>
<return:=x as 1 | 2/>
// ^?
1 change: 1 addition & 0 deletions packages/language-tools/src/extractors/script/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -954,6 +954,7 @@ constructor(_?: Return) {}
const valueLiteral = this.#read(boundRange.value);
this.#extractor
.copy(boundRange.value)
.write(" ")
.copy(boundRange.types)
.write(`\n)${SEP_COMMA_NEW_LINE}"`)
.copy(defaultMapPosition)
Expand Down