Js-beautify: تم إدراج سطر جديد بعد استيراد / تصدير وحدة ES6

تم إنشاؤها على ٩ يناير ٢٠١٤  ·  54تعليقات  ·  مصدر: beautify-web/js-beautify

يا،

أقوم بتشغيل jsbeautifier على مجموعة من الوحدات النمطية Ember.JS ES6 ولاحظت مشكلة صغيرة في بيانات التصدير.

افترض أن لدي وحدة يتم تصديرها على النحو التالي

export default DS.FixtureAdapter.extend();

سيضيف jsbeautifier سطرًا جديدًا بعد التصدير

export
default DS.FixtureAdapter.extend();

إنها مشكلة بسيطة تمثل مشكلة بالنسبة لنا فقط لأننا نفرض تشغيل jsbeautifier قبل قبول الالتزام. لذلك ، إذا قام مطور بإزالة السطر الجديد ، فسيتم تضمين الملف المعني في الالتزام على الرغم من أنه قد لا يكون له أي علاقة بالتغييرات التي يتم الالتزام بها.

enhancement

التعليق الأكثر فائدة

@ the-simian الخيار الصحيح هو "brace_style": "collapse-preserve-inline" ، في قسم "Brace style" إذا انتقلت إلى تفضيلات Atom. خيار "save_newlines" هو الحفاظ على الأسطر الجديدة عبر الملف بأكمله. أنت بالتأكيد تريد أن يكون هذا صحيحًا. :)

ال 54 كومينتر

متعلق بـ # 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 -modules
http://people.mozilla.org/~jorendorff/es6-draft.html#sec -imports
http://people.mozilla.org/~jorendorff/es6-draft.html#sec -exports

هذا يجعلنا جميعًا:

لكن يجب أن نتذكر جميعًا:

هذا صحيح تماما. : مبتسم:

لذلك تحصل على الإصلاح التالي - المدخلات غير المنطقية أدناه ستنتج مخرجات متطابقة من المُجمل. لا تزال معظم السيناريوهات تبدو مروعة ، لكنني شعرت أنه يمكنني اختراقها بأقل قدر من الألم.

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:
أي حل في الأفق؟

في وقت فراغي الغزير ...: ابتسم:

: +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 معطلة بالنسبة لي أيضًا عند استخدام atom

+1

+1

+1

+1

مع js-beautify 1.5.10 ، أحصل على ما يلي:

إدخال:

import { x, y, z } from './other';

انتاج:

import {
    x, y, z
}
from './other';

أنا بالتأكيد لا أريد الخط الجديد بعد قوس النهاية.

+1

أي خطط لدعم هذا؟

هل هذا لا يزال غير ثابت؟

لا يزال مفتوحا. نرحب بطلبات السحب.

+1

على الرغم من وجود حل بديل باستخدام:
/ * تجميل الحفظ: بدء _ /
/ _ تجميل الحفظ: end * /

هذا ليس لطيفا جدا لرؤيته.

+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 الخاص بك مع الخصائص الصحيحة المشار إليها؟ ليس لدي أي فكرة عن سبب عدم نجاحها على الإطلاق.

{
  "preserve_newlines": true,
  "max_preserve_newlines": 2
}

التي لم تصلحها (كما هو مذكور أعلاه)

@ the-simian الخيار الصحيح هو "brace_style": "collapse-preserve-inline" ، في قسم "Brace style" إذا انتقلت إلى تفضيلات Atom. خيار "save_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. أنا لست من محبي الانهيار. أرغب في إضافة قاعدة خاصة بالواردات ...

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات