MCPcopy Create free account
hub / github.com/EmNudge/watlings / createLspExtensions

Function createLspExtensions

web-build/src/editor.ts:381–488  ·  view source on GitHub ↗
(lsp: WatLSP)

Source from the content-addressed store, hash-verified

379}
380
381function createLspExtensions(lsp: WatLSP) {
382 const parseIfNeeded = createParseCache(lsp);
383
384 const watLinter = linter(
385 (view) => {
386 try {
387 const text = view.state.doc.toString();
388 if (!isWatContent(text)) return [];
389
390 parseIfNeeded(text);
391 const diags = lsp.provideDiagnostics();
392 return diags.map(
393 (d): Diagnostic => ({
394 from: posToOffset(view.state.doc, d.range.start.line, d.range.start.character),
395 to: posToOffset(view.state.doc, d.range.end.line, d.range.end.character),
396 severity: d.severity === 1 ? "error" : d.severity === 2 ? "warning" : "info",
397 message: d.message,
398 }),
399 );
400 } catch {
401 return [];
402 }
403 },
404 { delay: 300 },
405 );
406
407 const watHover = hoverTooltip((view, pos) => {
408 try {
409 const text = view.state.doc.toString();
410 if (!isWatContent(text)) return null;
411
412 const line = view.state.doc.lineAt(pos);
413 parseIfNeeded(text);
414 const hover = lsp.provideHover(line.number - 1, pos - line.from);
415 if (!hover) return null;
416
417 const from = hover.range
418 ? posToOffset(view.state.doc, hover.range.start.line, hover.range.start.character)
419 : pos;
420 const to = hover.range
421 ? posToOffset(view.state.doc, hover.range.end.line, hover.range.end.character)
422 : pos;
423 return {
424 pos: from,
425 end: to,
426 above: true,
427 create() {
428 const dom = document.createElement("div");
429 dom.className = "wat-hover";
430 dom.innerHTML = renderHoverMarkdown(hover.contents.value);
431 return { dom };
432 },
433 };
434 } catch {
435 return null;
436 }
437 });
438

Callers 1

createEditorFunction · 0.85

Calls 5

createParseCacheFunction · 0.85
isWatContentFunction · 0.85
posToOffsetFunction · 0.85
goToDefinitionFunction · 0.85
findReferencesFunction · 0.85

Tested by

no test coverage detected