mirror of
https://github.com/jashkenas/coffeescript.git
synced 2022-11-09 12:23:24 -05:00
[CS2] Support for CSX - equivalent of JSX (#4551)
* CSX implementation * fixed comment, used toJS, added error tests, fixed error in identifier regex, fixed interpolation inside attributes value and added test * added missing test for bare attributes, split attribute and indentifier regex, fixed checking for closing tags closing angle bracket * Refactor tests that compare expected generated JavaScript with actual generated JavaScript to use common helper; add colors to error message to make differences easier to read * Better match the style of the rest of the codebase * Remove unused function * More style fixes * Allow unspaced less-than operator when not using CSX * Replace includesCSX with a counter and simplify the unspaced operator logic * Fixed indexing and realized that I completely enabled the tight spacing, added a test for it too * Style fixes
This commit is contained in:
parent
63b109a4f5
commit
dc0fb85fd3
17 changed files with 1712 additions and 609 deletions
|
@ -1,8 +1,10 @@
|
|||
// Generated by CoffeeScript 2.0.0-beta2
|
||||
(function() {
|
||||
var BALANCED_PAIRS, CALL_CLOSERS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, Rewriter, SINGLE_CLOSERS, SINGLE_LINERS, generate, k, left, len, rite,
|
||||
var BALANCED_PAIRS, CALL_CLOSERS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, Rewriter, SINGLE_CLOSERS, SINGLE_LINERS, generate, k, left, len, rite, throwSyntaxError,
|
||||
indexOf = [].indexOf;
|
||||
|
||||
({throwSyntaxError} = require('./helpers'));
|
||||
|
||||
generate = function(tag, value, origin) {
|
||||
var tok;
|
||||
tok = [tag, value];
|
||||
|
@ -24,6 +26,7 @@
|
|||
this.tagPostfixConditionals();
|
||||
this.addImplicitBracesAndParens();
|
||||
this.addLocationDataToGeneratedTokens();
|
||||
this.enforceValidCSXAttributes();
|
||||
this.fixOutdentLocationData();
|
||||
return this.tokens;
|
||||
}
|
||||
|
@ -362,6 +365,19 @@
|
|||
});
|
||||
}
|
||||
|
||||
enforceValidCSXAttributes() {
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var next, ref;
|
||||
if (token.csxColon) {
|
||||
next = tokens[i + 1];
|
||||
if ((ref = next[0]) !== 'STRING_START' && ref !== 'STRING' && ref !== '(') {
|
||||
throwSyntaxError('expected wrapped or quoted CSX attribute', next[2]);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
});
|
||||
}
|
||||
|
||||
addLocationDataToGeneratedTokens() {
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var column, line, nextLocation, prevLocation, ref, ref1;
|
||||
|
@ -528,7 +544,7 @@
|
|||
|
||||
IMPLICIT_FUNC = ['IDENTIFIER', 'PROPERTY', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
|
||||
|
||||
IMPLICIT_CALL = ['IDENTIFIER', 'PROPERTY', 'NUMBER', 'INFINITY', 'NAN', 'STRING', 'STRING_START', 'REGEX', 'REGEX_START', 'JS', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'UNDEFINED', 'NULL', 'BOOL', 'UNARY', 'YIELD', 'AWAIT', 'UNARY_MATH', 'SUPER', 'THROW', '@', '->', '=>', '[', '(', '{', '--', '++'];
|
||||
IMPLICIT_CALL = ['IDENTIFIER', 'CSX_TAG', 'PROPERTY', 'NUMBER', 'INFINITY', 'NAN', 'STRING', 'STRING_START', 'REGEX', 'REGEX_START', 'JS', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'UNDEFINED', 'NULL', 'BOOL', 'UNARY', 'YIELD', 'AWAIT', 'UNARY_MATH', 'SUPER', 'THROW', '@', '->', '=>', '[', '(', '{', '--', '++'];
|
||||
|
||||
IMPLICIT_UNSPACED_CALL = ['+', '-'];
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue