export async function getRelatedArmRpcFromDoc()

in eng/tools/lint-diff/src/markdown-utils.ts [147:192]


export async function getRelatedArmRpcFromDoc(ruleName: string): Promise<string[]> {
  if (ruleName == "FATAL") {
    return [];
  }

  if (rpcInfoCache.has(ruleName)) {
    return rpcInfoCache.get(ruleName)!;
  }
  const docUrl = getDocRawUrl(ruleName);
  const rpcRules: string[] = [];
  let response;
  try {
    response = await axios.get(docUrl);
  } catch (e: any) {
    // TODO: Retry? Fail ungracefully?
    console.log(`GET ${docUrl} failed with ${e.message} .`);
    rpcInfoCache.set(ruleName, rpcRules);
    return rpcRules;
  }

  let walker = new commonmark.Parser().parse(response.data).walker();
  let event;
  while ((event = walker.next())) {
    const node = event.node;
    if (
      event.entering &&
      node.type === "heading" &&
      node.firstChild?.literal?.toLowerCase() === "related arm guideline code"
    ) {
      const next = node.next;
      if (next?.type == "list") {
        let currentItem = next.firstChild;
        while (currentItem) {
          const code = currentItem?.firstChild?.firstChild?.literal;
          if (code) {
            rpcRules.push(...code.split(",").map((c) => c.trim()));
          }
          currentItem = currentItem.next;
        }
      }
      break;
    }
  }
  rpcInfoCache.set(ruleName, rpcRules);
  return rpcRules;
}