From 957eb28242462d74c87446cfb0933d0889285c26 Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Wed, 30 Jan 2019 17:59:23 -0500 Subject: [PATCH] Don't run other validators if feature is missing tags Don't run disconnected highway check if there is an almost junction issue already Only run way validators on ways --- modules/validations/crossing_ways.js | 1 + modules/validations/deprecated_tag.js | 1 + modules/validations/disconnected_highway.js | 1 + modules/validations/generic_name.js | 6 +++- .../validations/highway_almost_junction.js | 1 + modules/validations/issue_manager.js | 34 ++++++++++++------- modules/validations/many_deletions.js | 2 ++ modules/validations/mapcss_checks.js | 5 ++- modules/validations/missing_tag.js | 1 + modules/validations/old_multipolygon.js | 6 +++- modules/validations/tag_suggests_area.js | 1 + 11 files changed, 44 insertions(+), 15 deletions(-) diff --git a/modules/validations/crossing_ways.js b/modules/validations/crossing_ways.js index ef5c283f2..f578d7f0d 100644 --- a/modules/validations/crossing_ways.js +++ b/modules/validations/crossing_ways.js @@ -359,6 +359,7 @@ export function validationHighwayCrossingOtherWays() { return issues; }; + validation.type = ValidationIssueType.crossing_ways; return validation; } diff --git a/modules/validations/deprecated_tag.js b/modules/validations/deprecated_tag.js index 651ed72c5..5a2664fe1 100644 --- a/modules/validations/deprecated_tag.js +++ b/modules/validations/deprecated_tag.js @@ -82,6 +82,7 @@ export function validationDeprecatedTag() { return issues; }; + validation.type = ValidationIssueType.deprecated_tags; return validation; } diff --git a/modules/validations/disconnected_highway.js b/modules/validations/disconnected_highway.js index 17722cb71..3d32fd29e 100644 --- a/modules/validations/disconnected_highway.js +++ b/modules/validations/disconnected_highway.js @@ -81,6 +81,7 @@ export function validationDisconnectedHighway() { return issues; }; + validation.type = ValidationIssueType.disconnected_highway; return validation; } diff --git a/modules/validations/generic_name.js b/modules/validations/generic_name.js index 604eb4959..ff57024eb 100644 --- a/modules/validations/generic_name.js +++ b/modules/validations/generic_name.js @@ -44,7 +44,7 @@ export function validationGenericName(context) { } - return function validation(entity) { + var validation = function(entity) { var issues = []; var generic = isGenericName(entity); if (generic) { @@ -74,4 +74,8 @@ export function validationGenericName(context) { return issues; }; + + validation.type = ValidationIssueType.generic_name; + + return validation; } diff --git a/modules/validations/highway_almost_junction.js b/modules/validations/highway_almost_junction.js index 62b708f11..df05e0f8e 100644 --- a/modules/validations/highway_almost_junction.js +++ b/modules/validations/highway_almost_junction.js @@ -166,6 +166,7 @@ export function validationHighwayAlmostJunction() { return issues; }; + validation.type = ValidationIssueType.highway_almost_junction; return validation; } diff --git a/modules/validations/issue_manager.js b/modules/validations/issue_manager.js index 84c9ef379..1251cc2a5 100644 --- a/modules/validations/issue_manager.js +++ b/modules/validations/issue_manager.js @@ -54,25 +54,35 @@ export function IssueManager(context) { return issuesByEntityId[entityID]; }; - var entityValidations = [ + var genericEntityValidations = [ validations.validationDeprecatedTag(), - validations.validationDisconnectedHighway(), validations.validationGenericName(), - validations.validationHighwayCrossingOtherWays(), - validations.validationHighwayAlmostJunction(), validations.validationMapCSSChecks(), - validations.validationMissingTag(), - validations.validationOldMultipolygon(), - validations.validationTagSuggestsArea() + validations.validationOldMultipolygon() ]; function validateEntity(entity) { - return _flatten(_map( - entityValidations, - function(fn) { - return fn(entity, context); + var issues = []; + // runs validation and appends resulting issues, returning true if validation passed + function runValidation(fn) { + var typeIssues = fn(entity, context); + issues = issues.concat(typeIssues); + return typeIssues.length === 0; + } + // other validations require feature to be tagged + if (!runValidation(validations.validationMissingTag())) return issues; + if (entity.type === 'way') { + if (runValidation(validations.validationHighwayAlmostJunction())) { + // only check for disconnected highway if no almost junctions + runValidation(validations.validationDisconnectedHighway()); } - )); + runValidation(validations.validationHighwayCrossingOtherWays()); + runValidation(validations.validationTagSuggestsArea()); + } + genericEntityValidations.forEach(function(fn) { + runValidation(fn); + }) + return issues; } self.validate = function() { diff --git a/modules/validations/many_deletions.js b/modules/validations/many_deletions.js index 9978dacb9..e570c6e10 100644 --- a/modules/validations/many_deletions.js +++ b/modules/validations/many_deletions.js @@ -6,6 +6,7 @@ import { } from './validation_issue'; export function validationManyDeletions() { + var threshold = 100; var validation = function(changes, context) { @@ -34,6 +35,7 @@ export function validationManyDeletions() { return issues; }; + validation.type = ValidationIssueType.map_rule_issue; return validation; } diff --git a/modules/validations/mapcss_checks.js b/modules/validations/mapcss_checks.js index adf4fcaa9..e8df9d3ea 100644 --- a/modules/validations/mapcss_checks.js +++ b/modules/validations/mapcss_checks.js @@ -1,5 +1,7 @@ import { services } from '../services'; - +import { + ValidationIssueType +} from './validation_issue'; export function validationMapCSSChecks() { var validation = function(entity, context) { if (!services.maprules) return []; @@ -17,6 +19,7 @@ export function validationMapCSSChecks() { return issues; }; + validation.type = ValidationIssueType.map_rule_issue; return validation; } diff --git a/modules/validations/missing_tag.js b/modules/validations/missing_tag.js index 02364322c..c2d9aefb0 100644 --- a/modules/validations/missing_tag.js +++ b/modules/validations/missing_tag.js @@ -58,6 +58,7 @@ export function validationMissingTag() { return issues; }; + validation.type = ValidationIssueType.missing_tag; return validation; } diff --git a/modules/validations/old_multipolygon.js b/modules/validations/old_multipolygon.js index 70a358074..e982e8ab1 100644 --- a/modules/validations/old_multipolygon.js +++ b/modules/validations/old_multipolygon.js @@ -13,7 +13,7 @@ import { export function validationOldMultipolygon() { - return function validation(entity, context) { + var validation = function(entity, context) { var issues = []; var graph = context.graph(); var mistaggedMultipolygon = osmIsSimpleMultipolygonOuterMember(entity, graph); @@ -47,4 +47,8 @@ export function validationOldMultipolygon() { } return issues; }; + + validation.type = ValidationIssueType.old_multipolygon; + + return validation; } diff --git a/modules/validations/tag_suggests_area.js b/modules/validations/tag_suggests_area.js index f6f1634d9..f93f0ac49 100644 --- a/modules/validations/tag_suggests_area.js +++ b/modules/validations/tag_suggests_area.js @@ -76,6 +76,7 @@ export function validationTagSuggestsArea() { return issues; }; + validation.type = ValidationIssueType.tag_suggests_area; return validation; }