1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
|
Changelog
=========
1.2.5 - 2020-07-03
------------------
- Will now import Iterable from the Python 3.3+ location as the previous
location is marked for removal in Python 3.9. The import will still
have a fallback to the previous location in order to maintain support
for Python 2.7. [
`#31 <https://github.com/calmjs/calmjs.parse/issues/31>`_
]
- Provide a test case helper to ensure that the generic ``Program`` repr
signature is provided to assist with test case portability. [
`#33 <https://github.com/calmjs/calmjs.parse/issues/33>`_
]
- In the ``calmjs.parse.vlq`` module, implemented the ``decode_vlq``
helper for completeness/symmetry to the ``encode_vlq`` helper. [
`#33 <https://github.com/calmjs/calmjs.parse/issues/33>`_
]
1.2.4 - 2020-03-17
------------------
- Correct usage of ``__doc__`` to support level 2 optimized mode. [
`#29 <https://github.com/calmjs/calmjs.parse/issues/29>`_
`#30 <https://github.com/calmjs/calmjs.parse/issues/30>`_
]
- Corrected some minor string definition syntax, where raw string prefix
should be used but was not previously.
1.2.2 - 2020-01-18
------------------
- Correctly include LICENSE file in sdist. [
`#27 <https://github.com/calmjs/calmjs.parse/issues/27>`_
`#28 <https://github.com/calmjs/calmjs.parse/issues/28>`_
]
- Include the correct test data general form for some previously added
test cases to better accommodate already planned future features.
1.2.1 - 2019-11-21
------------------
- Fix the issue of failures with regex statement that occur due to lexer
being in a state where the disambiguation between REGEX or DIV token
types is not immediately possible, as tokens such as RBRACE, PLUSPLUS
or MINUSMINUS must be consumed by parser in order to be disambiguated,
but due to the lookahead nature done by yacc, the DIV token will be
prematurely produced and the only way to achieve this is during the
error handling stage. [
`#25 <https://github.com/calmjs/calmjs.parse/issues/25>`_
`#26 <https://github.com/calmjs/calmjs.parse/issues/26>`_
]
- Part of the previous fix also removed newline or comment tokens from
being reported as part of parsing error messages.
1.2.0 - 2019-08-15
------------------
- Partial support for parsing of comments. Currently not all comments
will be captured during parsing, due to the desire to simplify access
of them through the ``asttypes.Node`` instances with the generic
``comments`` attribute provided by it. [
`#24 <https://github.com/calmjs/calmjs.parse/issues/24>`_
]
- Enabled by passing ``with_comments=True`` to the parser..
- The limitation lies in the fact that if a node has multiple token
slots (e.g. ``if...else``), the comments that lie immediate before
the first will be captured, while the comments that lie immediate to
the subsequent ones will be omitted. The fix would involve
providing a full syntax tree node types, and that the parser rules
would need to be implemented in a more amenable manner such that the
generation of such could be done.
- All comments that lie immediately before the node are accessible
using the ``comments`` attribute.
- These comments nodes will not be yielded via the children() method.
- Various features and methods have been updated to account for
comments. Notably, sourcemap generation will be able to deal with
source fragments that contain newlines provided that both colno and
lineno are provided.
- Correctly fail on incorrect hexadecimal/unicode escape sequences while
reporting the specific character location; also report on the starting
position of an unterminated string literal. [
`#23 <https://github.com/calmjs/calmjs.parse/issues/23>`_
]
1.1.3 - 2018-11-08
------------------
- Correct issues with certain non-optional spaces being omitted for the
minify print cases, which caused malformed outputs. [
`#22 <https://github.com/calmjs/calmjs.parse/issues/22>`_
]
1.1.2 - 2018-08-20
------------------
- Default repr on synthetic nodes or nodes without column or row number
assigned should no longer error. [
`#20 <https://github.com/calmjs/calmjs.parse/issues/20>`_
]
- The same line terminator regex introduced in 1.1.0 used for line
continuation in strings now applied to the line terminator pattern to
the lexer, such that the line numbering is corrected for the Windows
specific <CR><LF> sequence. [
`#21 <https://github.com/calmjs/calmjs.parse/issues/21>`_
]
1.1.1 - 2018-08-11
------------------
- Ensure that the accounting of layout rule chunks is done correctly in
the case where layout handlers specified a tuple of layout rules for
combined handling. [
`#19 <https://github.com/calmjs/calmjs.parse/issues/19>`_
]
- The issue caused by this error manifest severely in the case where
multiple layout rule tokens are produced in a manner that repeats
a pattern that also have a layout handler rule for them, which
does not typically happen for normal code with the standard printers
(as layout chunks are many and they generally do not result in a
repeated pattern that gets consumed). However this is severely
manifested in the case of minified output with semicolons dropped,
as that basically guarantee that any series of closing blocks that
fit the pattern to be simply dropped.
1.1.0 - 2018-08-07
------------------
- Correct the implementation of line continuation in strings. This also
meant a change in the minify unparser so that it will continue to
remove the line continuation sequences. [
`#16 <https://github.com/calmjs/calmjs.parse/issues/16>`_
]
- Correct the implementation of ASI (automatic semicolon insertion) by
introducing a dedicated token type, such that the production of
empty statement can no longer happen and that distinguishes it from
production of statements that should not have ASI applied, such that
incorrectly successful parsing due to this issue will no longer
result. [
`#18 <https://github.com/calmjs/calmjs.parse/issues/18>`_
`rspivak/slimit#29 <https://github.com/rspivak/slimit/issues/29>`_
`rspivak/slimit#101 <https://github.com/rspivak/slimit/issues/101>`_
]
1.0.1 - 2018-04-19
------------------
- Ensure that the es5 Unparser pass on the prewalk_hooks argument in
its constructor.
- Minor packaging fixes; also include optimization modules for ply-3.11.
1.0.0 - 2017-09-26
------------------
Full support for sourcemaps; changes that make it possible follows:
- High level read/write functionality provided by a new ``io`` module.
- There is now a ``Deferrable`` rule type for marking certain Tokens
that need extra handling. The support for this has changed the
various API that deals with setting up of this.
- For support of the sourcemap generation, a number of new ruletypes
have been added.
- The sourcemap write function had its argument order modified to
better support the sourcepath tracking feature of input Nodes. Its
return value also now match the ordering of the encode_sourcemap
function.
- The chunk types in ruletypes have been renamed, and also a new type
called StreamFragment is introduced, so that multiple sources output
to a single stream can be properly tracked by the source mapping
processes.
- `rspivak/slimit#66 <https://github.com/rspivak/slimit/issues/66>`_
should be fully supported now.
Minify printer now has ability to shorten/obfuscate identifiers:
- Provide a name obfuscation function for shortening identifiers, to
further achieve minified output. Note that this does not yet fully
achieve the level of minification ``slimit`` had; future versions
may implement this functionality as various AST transformations.
- Also provided ability to drop unneeded semicolons.
Other significant changes:
- Various changes to internal class and function names for the 1.0.0
release. A non exhaustive listing of changes to modules relative to
the root of this package name as compared to previous major release
follows:
``asttypes``
- All ``slimit`` compatibility features removed.
- ``Switch`` (the incorrect version) removed.
- ``SwitchStatement`` -> ``Switch``
- ``SetPropAssign`` constructor: ``parameters`` -> ``parameter``
- ``UnaryOp`` -> ``UnaryExpr``
- Other general deprecated features also removed.
``factory``
- ``Factory`` -> ``SRFactory``
``visitors``
- Removed (details follow).
``walkers``
- ``visitors.generic.ReprVisitor`` -> ``walkers.ReprWalker``
``layouts``
- Module was split and reorganised; the simple base ones can be
found in ``handlers.core``, the indentation related features are
now in ``handlers.indentation``.
``unparsers.base``
- ``.default_layout_handlers`` -> ``handlers.core.default_rules``
- ``.minimum_layout_handlers`` -> ``handlers.core.minimum_rules``
``unparsers.prettyprint``
- Renamed to ``unparsers.walker``.
- The implementation was actually standard tree walking, no
correctly implemented visitor functions/classes were ever present.
``vlq``
- ``.create_sourcemap`` -> ``sourcemap.create_sourcemap``
- Broke up the visitors class as they weren't really visitors as
described. The new implementations (calmjs.parse-0.9.0) were really
walkers, so move them to that name and leave it at that. Methods
were also renamed to better reflect their implementation and purpose.
- Many slimit compatibility modules, classes and incorrectly implemented
functionalities removed.
- The usage of the Python 3 ``str`` type (``unicode`` in Python 2) is
now enforced for the parser, to avoid various failure cases where
mismatch types occur.
- The base Node asttype has a sourcepath attribute which is to be used
for tracking the original source of the node; if assigned, all its
subnodes without sourcepath defined should be treated as from that
source.
- Also provide an even higher level function for usage with streams
through the ``calmjs.parse.io`` module.
- Semicolons and braces added as structures to be rendered.
Bug fixes:
- Functions starting with a non-word character will now always have a
whitespace rendered before it to avoid syntax error.
- Correct an incorrect iterator usage in the walk function.
- Ensure List separators don't use the rowcol positions of a subsequent
Elision node.
- Lexer will only report real lexer tokens on errors (ASI generated
tokens are now dropped as they don't exist in the original source
which results in confusing rowcol reporting).
- `rspivak/slimit#57 <https://github.com/rspivak/slimit/issues/57>`_,
as it turns out ``'\0'`` is not considered to be octal, but is a <NUL>
character, which the rule to parse was not actually included in the
lexer patches that were pulled in previous to this version.
- `rspivak/slimit#75 <https://github.com/rspivak/slimit/issues/75>`_,
Option for shadowing of names of named closures, which is now disabled
by default (obfuscated named closures will not be shadowed by other
obfuscated names in children).
- Expressions can no longer contain an unnamed function.
0.10.1 - 2017-08-26
-------------------
- Corrected the line number reporting for the lexer, and correct the
propagation of that to the parser and the Node subclasses. Fixes the
incorrect implementation added by `moses-palmer/slimit@8f9a39c7769
<https://github.com/moses-palmer/slimit/commit/8f9a39c7769>`_ (where
the line numbers are tabulated incorrectly when comments are present,
and also the yacc tracking added by `moses-palmer/slimit@6aa92d68e0
<https://github.com/moses-palmer/slimit/commit/6aa92d68e0>`_ (where
the custom lexer class does not provide the position attributes
required by ply).
- Implemented bookkeeping of column numbers.
- Made other various changes to AST but for compatibility reasons (to
not force a major semver bump) they are only enabled with a flag to
the ES5 parser.
- Corrected a fault with how switch/case statements are handled in a way
that may break compatibility; fixes are only enabled when flagged.
`rspivak/slimit#94 <https://github.com/rspivak/slimit/issues/94>`_
- The repr form of Node now shows the line/col number info by default;
the visit method of the ReprVisitor class have not been changed, only
the invocation of it via the callable form has as that is the call
target for __repr__. This is a good time to mention that named
methods afford the most control for usage as documented already.
- Parsers now accept an asttypes module during its construction.
- Provide support for source map generation classes.
- Introduced a flexible visitor function/state class that accepts a
definition of rules for the generation of chunk tuples that are
compatible for the source map generation. A new way for pretty
printing and minification can be achieved using this module.
0.9.0 - 2017-06-09
------------------
- Initial release of the fork of ``slimit.parser`` and its parent
modules as ``calmjs.parse``.
- This release brings in a number of bug fixes that were available via
other forks of ``slimit``, with modifications or even a complete
revamp.
- Issues addressed includes:
- `rspivak/slimit#52 <https://github.com/rspivak/slimit/issues/52>`_,
`rspivak/slimit#59 <https://github.com/rspivak/slimit/issues/59>`_,
`rspivak/slimit#81 <https://github.com/rspivak/slimit/issues/81>`_,
`rspivak/slimit#90 <https://github.com/rspivak/slimit/issues/90>`_
(relating to conformance of ecma-262 7.6 identifier names)
- `rspivak/slimit#54 <https://github.com/rspivak/slimit/issues/54>`_
(fixed by tracking scope and executable current token in lexer)
- `rspivak/slimit#57 <https://github.com/rspivak/slimit/issues/57>`_,
`rspivak/slimit#70 <https://github.com/rspivak/slimit/issues/70>`_
(octal encoding (e.g \0), from `redapple/slimit@a93204577f
<https://github.com/redapple/slimit/commit/a93204577f>`_)
- `rspivak/slimit#62 <https://github.com/rspivak/slimit/issues/62>`_
(formalized into a unittest that passed)
- `rspivak/slimit#73 <https://github.com/rspivak/slimit/issues/73>`_
(specifically the desire for a better repr; the minifier bits are
not relevant to this package)
- `rspivak/slimit#79 <https://github.com/rspivak/slimit/pull/79>`_
(tab module handling was completely reimplemented)
- `rspivak/slimit#82 <https://github.com/rspivak/slimit/issues/82>`_
(formalized into a unittest that passed)
- Include various changes gathered by `rspivak/slimit#65
<https://github.com/rspivak/slimit/pull/65>`_, which may be the source
of some of the fixes listed above.
|