Merge pull request #12 from TechnologyAdvice/ast-balance

Parser: Fixed binOp balancing after nested idents
This commit is contained in:
Tom Shawver 2016-04-22 09:59:20 -04:00
Родитель e16d5659fa 5d26a6c3de
Коммит 24f7fddb6d
6 изменённых файлов: 35 добавлений и 8 удалений

Просмотреть файл

@ -1,7 +1,8 @@
language: node_js
node_js:
- "0.12"
- "iojs"
- "4"
- "5"
addons:
code_climate:
repo_token:
@ -10,3 +11,4 @@ script: node_modules/.bin/gulp coverage-test
after_script:
- npm install -g codeclimate-test-reporter
- cat coverage/lcov.info | codeclimate

Просмотреть файл

@ -2,7 +2,13 @@
This project adheres to [Semantic Versioning](http://semver.org/).
## Development
Nothing yet!
### Fixed
- Binary operators after nested identifiers were not balanced properly,
resulting in a broken expression/AST
- Gulp (or one of its plugins) had a breaking change in a minor release,
preventing the frontend build from running. This build method will be
removed from the next major version of Jexl. For now, Jexl is now version-
locked to the original gulp+plugins that worked.
## [v1.1.2]
### Changed

2
dist/jexl.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -96,6 +96,7 @@ exports.identifier = function(token) {
if (this._nextIdentEncapsulate) {
node.from = this._cursor;
this._placeBeforeCursor(node);
this._nextIdentEncapsulate = false;
}
else {
if (this._nextIdentRelative)

Просмотреть файл

@ -32,17 +32,17 @@
},
"homepage": "https://github.com/TechnologyAdvice/jexl",
"devDependencies": {
"browserify": "^9.0.3",
"browserify": "=9.0.3",
"chai": "^2.0.0",
"chai-as-promised": "^4.2.0",
"gulp": "^3.8.11",
"gulp": "=3.8.11",
"gulp-istanbul": "^0.6.0",
"gulp-istanbul-enforcer": "^1.0.3",
"gulp-mocha": "^2.0.0",
"gulp-rename": "^1.2.0",
"gulp-uglify": "^1.1.0",
"gulp-rename": "=1.2.0",
"gulp-uglify": "=1.1.0",
"istanbul": "^0.3.8",
"mocha": "^2.1.0",
"vinyl-transform": "^1.0.0"
"vinyl-transform": "=1.0.0"
}
}

Просмотреть файл

@ -406,4 +406,22 @@ describe('Parser', function() {
alternate: {type: 'Literal', value: 'baz'}
});
});
it('should correctly balance a binary op between complex identifiers', function() {
inst.addTokens(lexer.tokenize('a.b == c.d'));
inst.complete().should.deep.equal({
type: 'BinaryExpression',
operator: '==',
left: {
type: 'Identifier',
value: 'b',
from: {type: 'Identifier', value: 'a'}
},
right: {
type: 'Identifier',
value: 'd',
from: {type: 'Identifier', value: 'c'}
}
});
});
});