|
11 | 11 | var Syntax = require('jstransform').Syntax;
|
12 | 12 | var utils = require('jstransform/src/utils');
|
13 | 13 |
|
| 14 | +function commaAfterLastParen(value) { |
| 15 | + var state = 'normal'; |
| 16 | + var commaPos = 0; |
| 17 | + for (var i = 0; i < value.length; ++i) { |
| 18 | + if (state === 'normal') { |
| 19 | + if (value.substr(i, 2) === '//') { |
| 20 | + state = 'singleline'; |
| 21 | + i += 1; |
| 22 | + } else if (value.substr(i, 2) === '/*') { |
| 23 | + state = 'multiline'; |
| 24 | + i += 1; |
| 25 | + } else if (value.charAt(i).trim() !== '') { |
| 26 | + commaPos = i + 1; |
| 27 | + } |
| 28 | + } else if (state === 'singleline' && value.charAt(i) === '\n') { |
| 29 | + state = 'normal'; |
| 30 | + } else if (state === 'multiline' && |
| 31 | + value.charAt(i) === '*' && |
| 32 | + i + 1 < value.length && |
| 33 | + value.charAt(i + 1) === '/') { |
| 34 | + i += 1; |
| 35 | + state = 'normal'; |
| 36 | + } |
| 37 | + } |
| 38 | + return value.substring(0, commaPos) + ', ' + trimLeft(value.substring(commaPos)); |
| 39 | +} |
| 40 | + |
14 | 41 | function renderJSXLiteral(object, isLast, state, start, end) {
|
15 | 42 | var lines = object.value.split(/\r\n|\n|\r/);
|
16 | 43 |
|
@@ -84,11 +111,11 @@ function renderJSXExpressionContainer(traverse, object, isLast, path, state) {
|
84 | 111 | if (!isLast && object.expression.type !== Syntax.JSXEmptyExpression) {
|
85 | 112 | // If we need to append a comma, make sure to do so after the expression.
|
86 | 113 | utils.catchup(object.expression.range[1], state, trimLeft);
|
87 |
| - utils.append(', ', state); |
| 114 | + utils.catchup(object.range[1] - 1, state, commaAfterLastParen); |
| 115 | + } else { |
| 116 | + // Minus 1 to skip `}`. |
| 117 | + utils.catchup(object.range[1] - 1, state, trimLeft); |
88 | 118 | }
|
89 |
| - |
90 |
| - // Minus 1 to skip `}`. |
91 |
| - utils.catchup(object.range[1] - 1, state, trimLeft); |
92 | 119 | utils.move(object.range[1], state);
|
93 | 120 | return false;
|
94 | 121 | }
|
|
0 commit comments