in src/grammar.ts [103:147]
function _extractIncludedScopesInPatterns(result: ScopeDependencyCollector, baseGrammar: IRawGrammar, selfGrammar: IRawGrammar, patterns: IRawRule[], repository: IRawRepository | undefined): void {
for (const pattern of patterns) {
if (result.visitedRule.has(pattern)) {
continue;
}
result.visitedRule.add(pattern);
const patternRepository = (pattern.repository ? mergeObjects({}, repository, pattern.repository) : repository);
if (Array.isArray(pattern.patterns)) {
_extractIncludedScopesInPatterns(result, baseGrammar, selfGrammar, pattern.patterns, patternRepository);
}
const include = pattern.include;
if (!include) {
continue;
}
if (include === '$base' || include === baseGrammar.scopeName) {
collectDependencies(result, baseGrammar, baseGrammar);
} else if (include === '$self' || include === selfGrammar.scopeName) {
collectDependencies(result, baseGrammar, selfGrammar);
} else if (include.charAt(0) === '#') {
collectSpecificDependencies(result, baseGrammar, selfGrammar, include.substring(1), patternRepository);
} else {
const sharpIndex = include.indexOf('#');
if (sharpIndex >= 0) {
const scopeName = include.substring(0, sharpIndex);
const includedName = include.substring(sharpIndex + 1);
if (scopeName === baseGrammar.scopeName) {
collectSpecificDependencies(result, baseGrammar, baseGrammar, includedName, patternRepository);
} else if (scopeName === selfGrammar.scopeName) {
collectSpecificDependencies(result, baseGrammar, selfGrammar, includedName, patternRepository);
} else {
result.add(new PartialScopeDependency(scopeName, include.substring(sharpIndex + 1)));
}
} else {
result.add(new FullScopeDependency(include));
}
}
}
}