diff --git a/src/engine/Engine.js b/src/engine/Engine.js index 6b1d38a..4b26e68 100644 --- a/src/engine/Engine.js +++ b/src/engine/Engine.js @@ -6,6 +6,7 @@ const lpsRequire = require('../lpsRequire'); const LiteralTreeMap = lpsRequire('engine/LiteralTreeMap'); const FunctorProvider = lpsRequire('engine/FunctorProvider'); +const StaticAnalyzer = lpsRequire('engine/StaticAnalyzer'); const processRules = lpsRequire('utility/processRules'); const goalTreeSorter = lpsRequire('utility/goalTreeSorter'); @@ -704,6 +705,7 @@ function Engine(programArg) { // we preprocess some of the built-in processors by looking at the facts // of the _program. this.on('loaded', () => { + StaticAnalyzer.analyze(_program, _engineEventManager); settingsProcessor(this, _program); timableProcessor(this, _program); initiallyProcessor(this, _program); diff --git a/src/engine/StaticAnalyzer.js b/src/engine/StaticAnalyzer.js new file mode 100644 index 0000000..bb676d7 --- /dev/null +++ b/src/engine/StaticAnalyzer.js @@ -0,0 +1,26 @@ +/* + This file is part of the lps.js project, released open source under + the BSD 3-Clause license. For more info, please see https://github.com/mauris/lps.js + */ + +const lpsRequire = require('../lpsRequire'); +const stringLiterals = lpsRequire('utility/strings'); + +const WARNING_EVENT = 'warning'; + +function StaticAnalyzer() { +} + +StaticAnalyzer.analyze = function (program, eventManager) { + const rules = program.getRules(); + if (rules.length === 0) { + eventManager.notify(WARNING_EVENT, { + type: 'rule.empty', + message: stringLiterals( + 'engine.analyzer.noRules' + ) + }); + } +}; + +module.exports = StaticAnalyzer;