Files
android-dev-ext/langserver/java/validation/unit-decl-order.js
2020-05-23 13:20:51 +01:00

34 lines
1.0 KiB
JavaScript

const { ModuleBlock, PackageBlock, ImportBlock, TypeDeclBlock } = require('../parser9');
const ParseProblem = require('../parsetypes/parse-problem');
/**
* @param {ModuleBlock} mod
*/
module.exports = function(mod) {
let have_imports, have_type;
const problems = [];
for (let decl of mod.decls()) {
let p;
switch (true) {
case decl instanceof PackageBlock:
if (have_imports || have_type) {
p = ParseProblem.Error(decl, 'package must be declared before import and type declarations');
}
break;
case decl instanceof ImportBlock:
if (have_type) {
p = ParseProblem.Error(decl, 'imports must be declared before type declarations');
}
have_imports = true;
break;
case decl instanceof TypeDeclBlock:
have_type = true;
break;
}
if (p) {
problems.push(p)
}
}
return problems;
}