mirror of
https://github.com/adelphes/android-dev-ext.git
synced 2025-12-26 03:17:45 +00:00
report errors from unit parsing
This commit is contained in:
@@ -154,21 +154,27 @@ function extractSourceTypes(tokens, typemap) {
|
|||||||
*/
|
*/
|
||||||
function parse(source, typemap) {
|
function parse(source, typemap) {
|
||||||
const unit = new SourceUnit();
|
const unit = new SourceUnit();
|
||||||
let tokens;
|
/** @type {ParseProblem[]} */
|
||||||
|
let problems = [];
|
||||||
|
let tokens, timers = new Set();
|
||||||
|
const time = name => (timers.add(name), console.time(name));
|
||||||
|
const timeEnd = name => (timers.delete(name), console.timeEnd(name));
|
||||||
try {
|
try {
|
||||||
console.time('tokenize');
|
time('tokenize');
|
||||||
tokens = new TokenList(tokenize(source));
|
tokens = new TokenList(tokenize(source));
|
||||||
console.timeEnd('tokenize');
|
problems = tokens.problems;
|
||||||
|
timeEnd('tokenize');
|
||||||
|
|
||||||
// in order to resolve types as we parse, we must extract the set of source types first
|
// in order to resolve types as we parse, we must extract the set of source types first
|
||||||
const source_types = extractSourceTypes(tokens, typemap);
|
const source_types = extractSourceTypes(tokens, typemap);
|
||||||
// add them to the type map
|
// add them to the type map
|
||||||
source_types.forEach(t => typemap.set(t.shortSignature, t));
|
source_types.forEach(t => typemap.set(t.shortSignature, t));
|
||||||
|
|
||||||
console.time('parse');
|
time('parse');
|
||||||
parseUnit(tokens, unit, typemap);
|
parseUnit(tokens, unit, typemap);
|
||||||
console.timeEnd('parse');
|
timeEnd('parse');
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
|
timers.forEach(timeEnd);
|
||||||
if (tokens) {
|
if (tokens) {
|
||||||
addproblem(tokens, ParseProblem.Error(tokens.current, `Parse failed: ${err.message}`));
|
addproblem(tokens, ParseProblem.Error(tokens.current, `Parse failed: ${err.message}`));
|
||||||
} else {
|
} else {
|
||||||
@@ -176,7 +182,10 @@ function parse(source, typemap) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return unit;
|
return {
|
||||||
|
unit,
|
||||||
|
problems,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ let connection = createConnection(ProposedFeatures.all);
|
|||||||
|
|
||||||
///** @type {LiveParseInfo[]} */
|
///** @type {LiveParseInfo[]} */
|
||||||
//const liveParsers = [];
|
//const liveParsers = [];
|
||||||
/** @type {{content: string, uri: string, result: SourceUnit, typemap:Map<string,JavaType>, positionAt:(n) => Position, indexAt:(p:Position) => number}} */
|
/** @type {{content: string, uri: string, result: {unit:SourceUnit, problems:*[]}, typemap:Map<string,JavaType>, positionAt:(n) => Position, indexAt:(p:Position) => number}} */
|
||||||
let parsed = null;
|
let parsed = null;
|
||||||
|
|
||||||
function reparse(uri, content) {
|
function reparse(uri, content) {
|
||||||
@@ -261,7 +261,7 @@ async function validateTextDocument(textDocument) {
|
|||||||
|
|
||||||
if (parsed && parsed.result) {
|
if (parsed && parsed.result) {
|
||||||
try {
|
try {
|
||||||
problems = validate(parsed.result, parsed.typemap);
|
problems = [...parsed.result.problems, ...validate(parsed.result.unit, parsed.typemap)];
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user