analyze method
Implementation
Future<AnalyzedUnit> analyze(String uri, String text) async {
final lineIndex = LineIndex(text);
final tokenIndex = TokenIndex.scan(text);
final docs = DocExtractor(text);
final language = languageOf(uri) ?? 'dart';
final parser = _vm.getParser<String>(language);
final diagnostics = <Diagnostic>[];
ASTRoot? ast;
var symbols = const <SymbolInfo>[];
if (parser == null) {
diagnostics.add(
Diagnostic(
range: lineIndex.rangeAt(0, 0),
message: "No ApolloVM parser for language '$language'.",
severity: DiagnosticSeverity.warning,
),
);
} else {
ParseResult<String> result;
try {
result = await parser.parse(SourceCodeUnit(language, text, id: uri));
} catch (e) {
result = ParseResult(
SourceCodeUnit(language, text, id: uri),
errorMessage: e.toString(),
);
}
if (result.isOK) {
ast = result.root;
symbols = collectSymbols(ast!);
diagnostics.addAll(_importDiagnostics(ast, text, lineIndex));
} else {
diagnostics.add(
_parseErrorDiagnostic(result, lineIndex, text, language),
);
}
}
return AnalyzedUnit(
uri: uri,
language: language,
text: text,
lineIndex: lineIndex,
tokenIndex: tokenIndex,
docs: docs,
ast: ast,
symbols: symbols,
diagnostics: diagnostics,
);
}