diff --git a/langserver/java/validation/duplicate-members.js b/langserver/java/validation/duplicate-members.js deleted file mode 100644 index 0aa8acc..0000000 --- a/langserver/java/validation/duplicate-members.js +++ /dev/null @@ -1,93 +0,0 @@ -const { ModuleBlock, FieldBlock, TypeDeclBlock } = require('../parser9'); -const ParseProblem = require('../parsetypes/parse-problem'); - -/** - * - * @param {TypeDeclBlock} type - * @param {ParseProblem[]} probs - */ -function checkDuplicateFieldName(type, probs) { - /** @type {Map} */ - let names = new Map(); - type.fields.forEach(field => { - if (!field.name) { - return; - } - const value = names.get(field.name); - if (value === undefined) { - names.set(field.name, field); - } else { - if (value !== null) { - probs.push(ParseProblem.Error(value, `Duplicate field: ${field.name}`)); - names.set(field.name, null); - } - probs.push(ParseProblem.Error(field, `Duplicate field: ${field.name}`)); - } - }) - // check enclosed types - type.types.forEach(type => checkDuplicateFieldName(type, probs)); -} - -/** - * @param {string} outername - * @param {TypeDeclBlock[]} types - * @param {ParseProblem[]} probs - */ -function checkDuplicateTypeNames(outername, types, probs) { - /** @type {Map} */ - let names = new Map(); - types.forEach(type => { - const name = type.simpleName; - if (!name) { - return; - } - const value = names.get(name); - if (value === undefined) { - names.set(name, type); - } else { - if (value !== null) { - probs.push(ParseProblem.Error(value.name_token, `Duplicate type: ${outername}${name}`)); - names.set(name, null); - } - probs.push(ParseProblem.Error(type.name_token, `Duplicate type: ${outername}${name}`)); - } - }) - // check enclosed types - types.forEach(type => { - checkDuplicateTypeNames(`${outername}${type.simpleName}.`, type.types, probs); - }); -} - -/** - * @param {TypeDeclBlock} type - * @param {ParseProblem[]} probs - */ -function checkDuplicateTypeVariableName(type, probs) { - type.typevars.forEach((tv, i) => { - const name = tv.name; - if (tv.name === '?') { - return; - } - if (type.typevars.findIndex(tv => tv.name === name) < i) { - probs.push(ParseProblem.Error(tv.decl, `Duplicate type variable: ${name}`)); - } - }) - // check enclosed types - type.types.forEach(type => { - checkDuplicateTypeVariableName(type, probs); - }); -} - -/** - * @param {ModuleBlock} mod - */ -module.exports = function(mod) { - const probs = []; - mod.types.forEach(type => { - checkDuplicateFieldName(type, probs); - checkDuplicateTypeVariableName(type, probs); - }); - checkDuplicateTypeNames('', mod.types, probs); - return probs; -} - diff --git a/langserver/java/validation/multiple-package-decls.js b/langserver/java/validation/multiple-package-decls.js deleted file mode 100644 index 4626f39..0000000 --- a/langserver/java/validation/multiple-package-decls.js +++ /dev/null @@ -1,13 +0,0 @@ -const { ModuleBlock } = require('./../parser9'); -const ParseProblem = require('./../parsetypes/parse-problem'); - -/** - * @param {ModuleBlock} mod - */ -module.exports = function(mod) { - return mod.packages.slice(1).map( - pkg => { - return ParseProblem.Error(pkg, 'Additional package declaration'); - } - ) -} \ No newline at end of file diff --git a/langserver/java/validation/parse-errors.js b/langserver/java/validation/parse-errors.js deleted file mode 100644 index 259b922..0000000 --- a/langserver/java/validation/parse-errors.js +++ /dev/null @@ -1,30 +0,0 @@ -const { ModuleBlock, TypeDeclBlock, MethodBlock } = require('../parser9'); -const ParseProblem = require('../parsetypes/parse-problem'); - -/** - * @param {TypeDeclBlock} type - * @param {ParseProblem[]} probs - */ -function checkTypeParseErrors(type, probs) { - type.parseErrors.forEach(err => probs.push(ParseProblem.Error(err, `Invalid, incomplete or unsupported declaration`))); - type.methods.filter(m => m.parseErrors).forEach(m => checkMethodParseErrors(m, probs)); - type.types.forEach(type => checkTypeParseErrors(type, probs)); -} - -/** - * @param {MethodBlock} method - * @param {ParseProblem[]} probs - */ -function checkMethodParseErrors(method, probs) { - method.parseErrors.forEach(err => probs.push(ParseProblem.Error(err, `Invalid, incomplete or unsupported declaration`))); -} - -/** - * @param {ModuleBlock} mod - */ -module.exports = function(mod) { - const probs = []; - mod.parseErrors.forEach(err => probs.push(ParseProblem.Error(err, `Invalid, incomplete or unsupported declaration`))); - mod.types.forEach(type => checkTypeParseErrors(type, probs)); - return probs; -} diff --git a/langserver/java/validation/unit-decl-order.js b/langserver/java/validation/unit-decl-order.js deleted file mode 100644 index 6f7f861..0000000 --- a/langserver/java/validation/unit-decl-order.js +++ /dev/null @@ -1,33 +0,0 @@ -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; -}