All files / src/lsp hover.ts

90% Statements 45/50
82.35% Branches 14/17
100% Functions 2/2
90% Lines 45/50

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 501x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 86x 86x 1x 1x 86x 86x     86x 86x     86x 86x 86x   86x 86x 86x 86x 1x 86x 1x 1x 84x 84x 86x 80x 80x 4x 86x 2x 2x 2x 2x 2x 1x 1x
import * as LServer from "vscode-languageserver-types";
import {IRegistry} from "../_iregistry";
import {ABAPObject} from "../objects/_abap_object";
import {LSPUtils} from "./_lsp_utils";
import * as Tokens from "../abap/1_lexer/tokens";
import {ITextDocumentPositionParams} from "./_interfaces";
import {LSPLookup} from "./_lookup";
 
export class Hover {
  private readonly reg: IRegistry;
 
  public constructor(reg: IRegistry) {
    this.reg = reg;
  }
 
  public find(pos: ITextDocumentPositionParams): LServer.MarkupContent | undefined {
    const file = LSPUtils.getABAPFile(this.reg, pos.textDocument.uri);
    if (file === undefined) {
      return undefined;
    }
    const obj = this.reg.getObject(file.getObjectType(), file.getObjectName());
    if (!(obj instanceof ABAPObject)) {
      return undefined;
    }
 
    const found = LSPUtils.findCursor(this.reg, pos);
    if (found === undefined) {
      return undefined;
    } else if (found.token instanceof Tokens.StringTemplate
      || found.token instanceof Tokens.StringTemplateBegin
      || found.token instanceof Tokens.StringTemplateEnd
      || found.token instanceof Tokens.StringTemplateMiddle) {
      return {kind: LServer.MarkupKind.Markdown, value: "String Template"};
    } else if (found.token instanceof Tokens.Comment) {
      return {kind: LServer.MarkupKind.Markdown, value: "Comment"};
    }
 
    const lookup = LSPLookup.lookup(found, this.reg, obj);
    if (lookup?.hover) {
      return {kind: LServer.MarkupKind.Markdown, value: lookup.hover};
    }
 
    if (found.token instanceof Tokens.StringToken) {
      return {kind: LServer.MarkupKind.Markdown, value: "String"};
    }
 
    return undefined;
  }
 
}