async function showFile()

in frontend/src/index.js [139:224]


async function showFile(source, file, revision, selectedLine) {
  selectedLine = selectedLine !== undefined ? parseInt(selectedLine) : -1;

  let language;
  if (file.path.endsWith("cpp") || file.path.endsWith("h")) {
    language = "cpp";
  } else if (file.path.endsWith("c")) {
    language = "c";
  } else if (
    file.path.endsWith("js") ||
    file.path.endsWith("jsm") ||
    file.path.endsWith("mjs") ||
    file.path.endsWith("jsx")
  ) {
    language = "javascript";
  } else if (file.path.endsWith("css")) {
    language = "css";
  } else if (file.path.endsWith("py")) {
    language = "python";
  } else if (file.path.endsWith("java")) {
    language = "java";
  }

  const context = {
    navbar: buildNavbar(file.path, revision),
    language,
    lines: source.map((line, nb) => {
      const coverage = file.coverage[nb];
      let cssClass = "";
      let hits = null;
      if (coverage !== undefined && coverage >= 0) {
        cssClass = coverage > 0 ? "covered" : "uncovered";

        // Build a nicer coverage string for counts
        if (coverage >= 1000000) {
          hits = {
            nb: parseInt(coverage / 1000000),
            unit: "M",
          };
        } else if (coverage >= 1000) {
          hits = {
            nb: parseInt(coverage / 1000),
            unit: "k",
          };
        } else if (coverage > 0) {
          hits = {
            nb: coverage,
            unit: "",
          };
        }
      }

      // To make line numbers start from 1
      nb = nb + 1;

      // Override css class when selected
      if (nb === selectedLine) {
        cssClass = "selected";
      }
      return {
        nb,
        hits,
        coverage,
        line: line || " ",
        css_class: cssClass,
        route: buildRoute({ line: nb }),
      };
    }),
  };

  hide("message");
  hide("history");
  const output = render("file_coverage", context, "output");

  // Scroll to line
  if (selectedLine > 0) {
    const line = output.querySelector("#l" + selectedLine);
    line.scrollIntoView({
      behavior: "smooth",
      block: "center",
    });
  }

  // Highlight source code once displayed
  Prism.highlightAll(output);
}