jscodeshift/recast: objectExpression всегда красиво печатается. Как я могу предотвратить это?

Я использую jscodeshift для преобразования вызовов функций:

foo() --> foo({uid: ... метка: ...})

const newArgObj = j.objectExpression([
    j.property(
        'init',
        j.identifier('uid'),
        j.literal(getUID()),
    ),
    j.property(
        'init',
        j.identifier('label'),
        j.literal('bar'),
    )
]);
node.arguments = [newArgObj];

...

return callExpressions.toSource({quote: 'single'});

Проблема в том, что objectExpression всегда красиво печатается:

foo({
    uid: 'LBL_btBeZETZ',
    label: 'bar'
})

Как предотвратить это и получить что-то вроде:

foo({uid: 'LBL_btBeZETZ', label: 'bar'})

person cimak    schedule 12.03.2017    source источник


Ответы (1)


хорошо, это невозможно, взгляните на принтер recast.js источник:

case "ObjectExpression":
case "ObjectPattern":
case "ObjectTypeAnnotation":
    ...
    var len = 0;
    fields.forEach(function(field) {
        len += n[field].length;
    });

    var oneLine = (isTypeAnnotation && len === 1) || len === 0;
    var parts = [oneLine ? "{" : "{\n"];
    ...
            if (!oneLine) {
                lines = lines.indent(options.tabWidth);
            }
    ...
    parts.push(oneLine ? "}" : "\n}");

ВРЕМЕННОЕ РЕШЕНИЕ (по крайней мере, в моем простом случае) - вы можете использовать необработанную строку:

const rawCode = `{uid: '${getUID()}', label: 'bar' }`;
node.arguments = [rawCode];

or

node.arguments = [j.jsxText(rawCode)];

Оба дадут вам:

foo({uid: 'LBL_btBeZETZ', label: "bar" })
person cimak    schedule 15.03.2017