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;
}