UNPKG

langium-cli

Version:

CLI for Langium - the language engineering tool

44 lines 1.86 kB
/****************************************************************************** * Copyright 2021 TypeFox GmbH * This program and the accompanying materials are made available under the * terms of the MIT License, which is available in the project root. ******************************************************************************/ import chalk from 'chalk'; import { AstUtils, GrammarAST, GrammarUtils, stream } from 'langium'; //eslint-disable-next-line @typescript-eslint/no-explicit-any export function log(level, options, message, ...args) { if (options.watch) { console[level](getTime() + message, ...args); } else { console[level](message, ...args); } } export function getTime() { const date = new Date(); return `[${chalk.gray(`${padZeroes(date.getHours())}:${padZeroes(date.getMinutes())}:${padZeroes(date.getSeconds())}`)}] `; } function padZeroes(i) { return i.toString().padStart(2, '0'); } export function collectKeywords(grammar) { const keywords = new Set(); const reachableRules = GrammarUtils.getAllReachableRules(grammar, false); for (const keyword of stream(reachableRules) .filter(rule => GrammarAST.isParserRule(rule) || GrammarAST.isInfixRule(rule)) .flatMap(rule => AstUtils.streamAllContents(rule).filter(GrammarAST.isKeyword))) { keywords.add(keyword.value); } return Array.from(keywords).sort(); } export function collectTerminalRegexps(grammar) { const result = {}; const reachableRules = GrammarUtils.getAllReachableRules(grammar, false); for (const terminalRule of stream(reachableRules).filter(GrammarAST.isTerminalRule)) { const name = terminalRule.name; const regexp = GrammarUtils.terminalRegex(terminalRule); result[name] = regexp; } return result; } //# sourceMappingURL=langium-util.js.map