Привет,
Я использую jsbeautifier для набора модулей Ember.JS ES6 и заметил небольшую проблему с операторами экспорта.
Предположим, у меня есть модуль, который экспортирует, как показано ниже.
export default DS.FixtureAdapter.extend();
jsbeautifier добавит новую строку после экспорта
export
default DS.FixtureAdapter.extend();
Это незначительная проблема, которая касается только нас, поскольку мы принудительно запускаем jsbeautifier до того, как фиксация будет принята. Таким образом, если разработчик удалит новую строку, рассматриваемый файл будет включен в фиксацию, даже если он не имеет ничего общего с фиксируемыми изменениями.
Относится к #388.
Я думаю, проблема здесь в том, что мы не обрабатываем экспорт как зарезервированное слово.
Эй, @bitwiseman , именно в этом проблема, но, например, если я напишу что-то вроде
export default moduleName;
Он будет украшен, как
default moduleName;
Что выглядит не очень :)
Кроме того, если я хочу импортировать стиль фигурной скобки
import { mod1, mod2 } from 'filePath';
Он будет украшен, как
import {
mod1,
mod2
} from 'filePath';
Что ты об этом думаешь ?
Все это звучит нормально. Ключевые слова module
, export
и import
должны быть добавлены, а код написан для правильного форматирования.
Есть новости о том, насколько близка эта проблема к решению?
Это будет в следующем выпуске. Инфраструктура есть, это должно быть незначительное изменение.
+1 за исправление форматирования операторов экспорта!
+1
+1
+1
+1
+1
+н. Я думаю, это просто вопрос добавления этих ключевых слов в список зарезервированных слов. Это правильно?
редактировать: нет. Я пытался найти, где будут новые правила, но слишком много кода, чтобы рисковать изменением =/
:+1:
Похоже, это важное обязательство сделать это правильно. Извините, ребята, но я должен перенести это на следующий релиз.
Для справки:
http://people.mozilla.org/~jorendorff/es6-draft.html#sec -модули
http://people.mozilla.org/~jorendorff/es6-draft.html#sec — импорт
http://people.mozilla.org/~jorendorff/es6-draft.html#sec — экспорт
Это делает нас всех:
Но мы все должны помнить:
Это точно правильно. :смайлик:
Для этого вы получаете следующее исправление — бессмысленный ввод ниже будет давать идентичный результат от бьютификатора. Большинство сценариев по-прежнему выглядят ужасно, но я чувствовал, что смогу взломать их с минимальной болью.
module "a" {
import odd from "Odd";
export default function div(x, y) {}
export function sum(x, y) {
return x + y;
}
export var pi = 3.141593;
export default moduleName;
export *
}
:+1:
Видно какое-нибудь исправление?
В свободное время... :smile:
:+1:
+1
+1
Исходная проблема была исправлена в версии 1.5.2.
@redking , @dred9e , @Aluxian , @simplyianm , @pgilad , @webbushka , @fpauser , @Volox , @naomifeehanmoran , @darlanalves , @thaume -
Мне нужна твоя помощь.
Пожалуйста, предоставьте примеры ввода, фактического вывода и желаемого вывода, чтобы я мог разобраться с этой проблемой. Также укажите, является ли фактический вывод нежелательным или вызывает синтаксические ошибки. Синтаксические ошибки будут иметь приоритет. У меня есть такой далеко от @thaume -
//input
import { mod1, mod2 } from 'filePath';
// actual output - non-breaking
import {
mod1,
mod2
} from 'filePath';
// desired output (unchanged)
import { mod1, mod2 } from 'filePath';
ПРИМЕЧАНИЯ:
@bitwiseman Приведенный выше пример - это именно то, чего я ожидал. В последнее время я играл с ES6 в редакторе Atom, где у меня нет автоматического форматирования при сохранении, только потому, что импорт испорчен.
Ожидаемый/вход:
import { Bar } from 'lib/Bar';
class Foo {
constructor() {
this.bar = new Bar();
}
}
export { Foo };
Как сейчас:
import {
Bar
}
from 'lib/Bar';
class Foo {
constructor() {
this.bar = new Bar();
}
}
export {
Foo
};
Я пока не знаю примера, который сломал бы код при форматировании.
Я знаю, что это не импорт/экспорт, и это связано с jsx, так что, вероятно, это совершенно другой зверь, однако я могу представить, что исправление будет связано:
return <div {...props}></div>;
становится
return <div {...props
} > < /div>;
Вы установили e4x = true
?
Да, я видел, и я вижу, что на обычном jsx без литералов его соблюдают. Однако наличие литерала типа {...props} в самом внешнем теге сразу нарушает форматирование. Если литерал находится внутри вложенного элемента, он работает немного лучше, но все же ломается на закрывающем теге. Я могу опубликовать больше примеров, если это правильное место/проблема.
@loopmode - Пожалуйста, откройте новую проблему с примером, который у вас есть выше.
+1
:+1: Это также влияет на деструктурирование объектов.
var { type, size } = someObject;
преобразуется в
var {
type, size
} = someObject;
:+1: импорт и форматирование jsx не работают у меня также при использовании атома
+1
+1
+1
+1
С js-beautify 1.5.10 я получаю следующее:
Вход:
import { x, y, z } from './other';
Выход:
import {
x, y, z
}
from './other';
Я определенно не хочу новую строку после закрывающей скобки.
+1
Есть ли планы по поддержке этого?
Это до сих пор не исправлено?
Он все еще открыт. Запросы на вытягивание приветствуются.
+1
Хотя есть обходной путь с использованием:
/* украсить сохранить:старт _/
/_ украсить сохранить:конец */
Это не очень приятно видеть.
+1
+1
+1
Для всех, кто заинтересован, оставшаяся проблема связана с import {x, y} from './other'
. Кажется, это частный случай деструктурированных объектов. См. № 511.
Я все еще получаю поведение для импорта, но все заявки закрыты. Как я могу сохранить одну строку в импорте после украшения в Atom? Спасибо!
Понятно, все, что нужно было, это добавить следующий конфиг в .jsbeautifyrc
{
"preserve_newlines": true,
"max_preserve_newlines": 2
}
Я все еще испытываю эту проблему с import
. Я использую 1.6.3
import { mod1, mod2 } from 'filePath';
становится
import {
mod1,
mod2
} from 'filePath';
для тех из вас, кто работает правильно, можете ли вы опубликовать свой файл .rc json с указанием правильных свойств? Я понятия не имею, почему он вообще не работает.
{
"preserve_newlines": true,
"max_preserve_newlines": 2
}
это не исправило (как писал выше)
@the-simian Правильный вариант — "brace_style": "collapse-preserve-inline"
в разделе «Стиль скобки», если вы просматриваете настройки Atom. Параметр «preserve_newlines» предназначен для сохранения новых строк во всем файле. Однако вы определенно хотите, чтобы это было правдой. :)
@eloquence спасибо за обновление, я попробую это, как только смогу
Редактировать: _Это было так_
Вот контекст, полностью рабочий json в файле .jsbeautifyrc:
{
"brace_style": "collapse-preserve-inline", //<----that
"break_chained_methods": false,
"end_with_newline": false,
"eol": "\n",
"eval_code": false,
"indent_char": " ",
"indent_level": 0,
"indent_size": 1,
"indent_with_tabs": true,
"jslint_happy": false,
"keep_array_indentation": false,
"keep_function_indentation": false,
"max_preserve_newlines": 4, //<---this
"preserve_newlines": true, // <---this too
"space_after_anon_function": false,
"space_before_conditional": true,
"unescape_strings": false,
"wrap_attributes": "auto",
"wrap_attributes_indent_size": 2,
"wrap_line_length": 0
}
@loopmode У меня похожая проблема с collapse-preserve-inline
"brace_style": "collapse-preserve-inline",
Вход:
const _state = { ...state }
Выход:
const _state = {...state }
Хотя collapse-preserve-inline
работает, невозможно получить такое же поведение с end-expand
или expand
. Есть ли способ, которым мы могли бы получить end-expand-preserve-inline
и подобное для других опций или, может быть, даже опцию preserve-inline-braces
с истинным или ложным?
@ Coburn37 - Пожалуйста, зарегистрируйте новую проблему и / или посмотрите # 1052, чтобы узнать, описывает ли это то, что вы хотите.
+1. Я не любитель развал-сохранения-инлайн. Я хотел бы добавить правило специально для импорта...
Самый полезный комментарий
@the-simian Правильный вариант —
"brace_style": "collapse-preserve-inline"
в разделе «Стиль скобки», если вы просматриваете настройки Atom. Параметр «preserve_newlines» предназначен для сохранения новых строк во всем файле. Однако вы определенно хотите, чтобы это было правдой. :)