Commit graph

1402 commits

Author SHA1 Message Date
Mingun 0dab14d652 Add ability to extract comments from the grammar (#511)
All comments stored in the `comments` property of the `grammar` node.
Comments extracted only if the `extractComments` options set to `true` when you generate parser.
This property is object with mapping start offset of comment to comment object, that looks like:

```js
{
  text: 'text in the comment, just after // or /* and before */',
  multiline: true|false,// true for /**/ comments, false for // comments
  location: location()
}
```
2018-01-24 18:10:45 +00:00
Futago-za Ryuu b6bc0d905e Use .js files with -c option on CLI
This commit adds support for '.js' files to be passed to the '-c', '--config'  or '--extra-options-file' options on the CLI, allowing the developer to do some extra work before the parser is generated (if they wish), or dynamically set options based on the enviroment.
2018-01-19 08:55:04 +00:00
Futago-za Ryuu d06a5b52ef Restore silentFails guard for rule$expects 2018-01-18 21:52:06 +00:00
Futago-za Ryuu 75a4101622 Some cosmetic changes
- Remove unused '__slice' variable
- Nicely indent a map/concat chain
- 'forEach' instead of 'map' in emitted code
2018-01-18 01:47:13 +00:00
Futago-za Ryuu f5b323b401 Report consistent errors on look ahead + cached results
This should resolve issue #452, and is based entirely on a fix @nikku did on a local branch of PEG.js v0.10.0 (Currently at https://github.com/nikku/pegjs/tree/452-peg-js-0.10-fix).

Also his test case from #555 is included.

Fixes #452, Closes #555
2018-01-18 01:24:34 +00:00
Mingun 9b90fa1d81 Move all codegeneration from generateBytecode pass to generateJs pass (#459)
* Split 'consts' collection by content types into:

  - literals: for literal expressions, like `"a"`
  - classes: for character class expressions, like `[a]`
  - expectations: for constants describing expected values when parse failed
  - functions: for constants with function code

* Move any JavaScript code generation from 'generateBytecode' to 'generateJs'.
* Rename opcode 'MATCH_REGEXP' to 'MATCH_CLASS' (name reflects purpose, not implementation).
* Replace 'PUSH' opcode with 'PUSH_EMPTY_STRING' opcode because it is only used with empty strings
2018-01-17 16:57:49 +00:00
Futago-za Ryuu 617b6b7425 Updated utils and tsd
- Exposed 'visitor.ASTVisitor'
- Remoed 'util.createVisitor'
- Added type 'peg.SourceLocation'
- Updated tsd for 'peg.compiler.visitor'
- Added tsd for 'peg.util.enforceFastProperties'
- Added tsd for new parser modules
2018-01-16 04:28:27 +00:00
Futago-za Ryuu 27ec5ed9b1 Ensure we are nearly always in fast mode on V8
See: https://stackoverflow.com/a/24989927/1518408
2018-01-16 02:57:12 +00:00
Futago-za Ryuu 7a19d46e8a Add the ASTVisitor class (#451)
For compatibility with pre-0.11 plugins, this class lives on the same namespace as the orignal visitor helper and also exports a static method called 'build'.
2018-01-16 02:54:14 +00:00
Futago-za Ryuu 93cc6c5b26 Parser calls AST node creator now
Before this commit, the PEG.js parser always created the AST using a plain JavaSctript object, but allthough simple and effective for the job, this method sacrificies performance slightly.

From now on the parser shall call a Node creator. This should help with performance, as well as in the future move some AST helpers into the new AST functions.
2018-01-16 02:46:41 +00:00
Futago-za Ryuu 7cdfc03e9f Added utility methods for objects
Before there used to be some internal utility methods for arrays and objects, but as the code base moved to ES5+ use  case only, these were removed in favour of native alternatives, but most of these were only beneficial for arrays.

This commit add's common utility methods for objects, and also exposes these as they can be used by plugin developer's on the PEG.js AST.
2018-01-14 20:44:53 +00:00
Futago-za Ryuu 02486cef7f ignore sh.exe stack trace file 2018-01-13 13:42:34 +00:00
Futago-za Ryuu 1b2072f239 Fix edgecase in gulpfile.js
There seem's to be an edgecase where a spawned process (in this case node.exe it self) is opened and gulp straight away thinks it closed. At first I thought it was a problem with Gulp, but after fiddleing it seem's to be a Window's problem, so I just updated the `node()` spawner to work on all platforms by using Gulp's callback to create an async task. Problem solved :)
2018-01-07 16:32:33 +00:00
Futago-za Ryuu b0056d7a9f Merge branch 'master' of github.com:pegjs/pegjs 2018-01-07 15:32:28 +00:00
Mingun 4cc9185a78 Improve error when reserved word used as label (#552)
Before this commit error looks like (for input `start = break:'a'`)

> Expected "!", "$", "&", "(", "*", "+", ".", "/", "/*", "//", ";", "?", character class, code block, comment, end of line, identifier, literal, or whitespace but ":" found.

After this error looks like

> Label can't be a reserved word "break".
2018-01-07 14:51:06 +00:00
Futago-za Ryuu 1434346332 Move require statement to the top 2018-01-07 02:12:05 +00:00
Futago-za Ryuu 93f9068c99 Updated tsd for compiler passes [ci skip] 2018-01-07 01:08:35 +00:00
Mingun fde1c480f4 Use chai-like instead of own properties matcher (#550) 2018-01-06 23:29:24 +00:00
Mingun a480c7d39c Excess points are deleted from the PR template (#551)
They already covered by `lint` and `test` checks [ci skip]
2018-01-06 23:23:20 +00:00
Mingun 534dc53ac2 Optimize redundant fail checks (#400)
eliminate unnecessary checks for the result of parse, when it can be statically determined
2018-01-05 21:28:09 +00:00
Futago-za Ryuu f5699d63fb Updated devDependencies
- Bump: eslint-config-futagozaryuu@3.8
- Bump:  run-sequence@2.2.1
2018-01-03 22:49:44 +00:00
Futago-za Ryuu cb385476c1 Updated header for generated browser files
The 'broser/*.js' files should now include the 'eslint-disable' comment directive.
2018-01-02 02:18:02 +00:00
Futago-za Ryuu 92f1798308 Moved Babel options to .babelrc 2018-01-02 02:08:50 +00:00
Futago-za Ryuu 06f1565a32 tsd: Added NotExpectation interface 2018-01-02 01:50:38 +00:00
Mingun 42ec335d13 Optimize silent fails: remove checks that always false (#399)
* Optimization: do not generate unreachable calls |peg$fail| and constants for it (local to the rule).
* Optimization: do not generate unreachable calls |peg$fail| and constants for it (non-local to rule).
2018-01-01 19:35:59 +00:00
Mingun a7a0a0d9ac Bump devDependencies (#549)
- Removed: babel-preset-es2015@6.24.1
- Added: babel-preset-env@1.6.1
- Updated: gulp-mocha@5.0.0
- Updated: nyc@11.4.1
- Updated: vinyl-buffer@1.0.1
- Updated: vinyl-source-stream@2.0.0
2017-12-31 22:01:29 +00:00
Mingun 669f782a5f Partial fix #194 - nonsenses error messages with semantic predicates (#547)
* Remove stack manipulations from FAIL opcode and rename FAIL to EXPECT
* Always save the expected values regardless of the match result of expression
* Remove unnecessary check for match result in the `named` node
* Collect and process expectations from predicates
2017-12-31 10:59:51 +00:00
Futago-za Ryuu 1b20aa5427 Ensure usage of 'lib/peg.d.ts'
This commit ensures that all modules outside 'lib' are importing 'lib/peg.js' so that VS Code automatically gets 'lib/peg.d.ts'.

An alias module for 'lib/peg.js' called 'pegjs-dev' was made for test files at 'test/node_modules/pegjs-dev.js'
2017-12-28 01:48:01 +00:00
Futago-za Ryuu 03cc2eae95 Added 'lib/peg.d.ts' for internal use 2017-12-28 01:23:37 +00:00
Futago-za Ryuu ea688abd02 Fix shadowing issue on UMD format (#499) 2017-12-28 00:01:35 +00:00
Futago-za Ryuu cd02806c94 Moved 'package.json:repository' field 2017-12-27 23:35:07 +00:00
Futago-za Ryuu 95409f0155 Moved Github related documents 2017-12-27 23:33:49 +00:00
Futago-za Ryuu 01a2be7b78 Removed 'gulp benchmark' from default tasks 2017-12-27 23:31:35 +00:00
Futago-za Ryuu d3cbbee592 Added .d.ts declaration files (#519) 2017-12-27 23:04:05 +00:00
Futago-za Ryuu a02f8091e3
Merge pull request #541 from Mingun/correct-options-in-tests
Auto-add `allowedStartRules` to test options for `changeAST` method if it not defined
2017-12-18 21:10:32 +00:00
Mingun 3e89534bb7 Auto-add allowedStartRules to test options for changeAST and reportError methods if it not defined 2017-12-19 01:38:26 +05:00
Futago-za Ryuu 75d655409c
Merge pull request #546 from Mingun/coverage
Add code coverage by Istanbul and coveralls.io
2017-12-18 18:59:16 +00:00
Mingun 3f8cf7cd58 Add coveralls.io support 2017-12-18 18:58:49 +05:00
Mingun f0e5eebe1a Add code coverage by Intanbul 2017-12-18 18:53:01 +05:00
Futago-za Ryuu d6142772f8 Switch dev to pegjs@dev [ci skip] 2017-12-18 03:52:23 +00:00
Futago-za Ryuu 1dd1487f9b Set version to v0.11.0-dev 2017-12-18 01:23:17 +00:00
Futago-za Ryuu db70215c4a Added 'header' option (#491) 2017-12-18 00:54:47 +00:00
Futago-za Ryuu 247a0bf707 Removed non-LTS versions of Node.js 2017-12-17 01:01:00 +00:00
Futago-za Ryuu f7dd11698a Updates devDependencies
- eslint-config-futagozaryuu
- sinon
2017-12-16 21:51:45 +00:00
Futago-za Ryuu 2a7dcdcfbe Changed 'bin/usage.txt' to 'bin/usage.js'
This change ensures the usage text always has LF line ending on Linux
2017-11-30 12:49:15 +00:00
Futago-za Ryuu 881eb67545 Removed redundant css files
The css files used in the benchmark contained 2 files for IE that contained syntax errors. These files weren't actually used by the benchmark, but were still in the repository.
2017-11-29 20:52:07 +00:00
Futago-za Ryuu a33eb0b45c Updated contribution section 2017-11-29 18:53:12 +00:00
Futago-za Ryuu 30d39f6267 Added PR Template
Based on the example at https://github.com/stevemao/github-issue-templates/tree/master/checklist2
2017-11-29 18:34:55 +00:00
Futago-za Ryuu 280466cc7b Added Issue Template
Based on the example at https://github.com/stevemao/github-issue-templates/tree/master/checklist2
2017-11-29 18:34:19 +00:00
Futago-za Ryuu 9568522d9c Move guidelines to docs folder 2017-11-29 15:29:42 +00:00