Definitelytyped: علامات التبويب مقابل المسافات؟

تم إنشاؤها على ١٨ فبراير ٢٠١٤  ·  44تعليقات  ·  مصدر: DefinitelyTyped/DefinitelyTyped

إذا تم تشغيل بعض التعليمات البرمجية مقابل التعريفات وصُدمت كيف أن الريبو موبوء بالاستخدام المختلط لعلامات التبويب والمسافات .

يمكننا تنظيم معركة لاتخاذ قرار بشأن علامات التبويب مقابل الفضاء ، ولكن لا أحد يفوز هناك.

ربما يجب علينا فقط الالتزام بأي نمط تم إنشاؤه في الأصل وفرض ذلك؟

أعتقد أنه يمكننا الجمع بين اكتشاف المسافة البادئة مع TSLint في المختبر (عندما يكون لدينا # 1314).

Discussion Infrastructure

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

لا توجد معركة. استخدم علامات التبويب.

ال 44 كومينتر

لا توجد معركة. استخدم علامات التبويب.

اصوت المساحات!

فلتبدأ الصراع الداخلي! :ابتسامة:

هاها. لا نحتاج ذلك. لكنك تعلم ... لن نجري هذه المحادثة إذا كنا نستخدم علامات التبويب وسيظل كل مطور لديه رمزه / رمزها متناسقًا تمامًا بالطريقة التي يريدها (مسافتان أو 4 مسافات). فقط أقول.

أنا أحب علامة التبويب.
لكنني أعتقد أنه يجب علينا الالتزام بالإعدادات الافتراضية لبرنامج VisualStudio.

مسافات بحجم المسافة البادئة 4 (افتراضات VS).
اضبط IDE الخاص بك للقيام بعلامات تبويب افتراضية لك ولسعادة الجميع.
أنا فقط لا أحب أن أرى [علامة تبويب] [علامة تبويب] [مسافة] [مسافة] [مسافة] للتعليمة البرمجية التي تريد المحاذاة مع كلمة في السطر أعلاه.

إذا شعر أي شخص برغبة في كتابة قاعدة TSLint لفرض نمط ثابت (على سبيل المثال: إما علامات تبويب أو 4 مسافات ولكن ليس كلاهما) ، فسنقوم بتشغيله في مُختبِر جديد (يدعم TSLint).

راجع أيضًا https://github.com/palantir/tslint/issues/122

مساحات! تستخدم FWIW JS libs مسافات (زاوية / مسج)

ربما حدث هذا بسبب Crockford: http://javascript.crockford.com/code.html

وحدة المسافة البادئة هي أربع مسافات. يجب تجنب استخدام علامات التبويب لأنه (حتى كتابة هذه السطور في القرن الحادي والعشرين) لا يزال هناك معيار غير قياسي لوضع علامات التبويب. يمكن أن ينتج عن استخدام المساحات حجم ملف أكبر ، ولكن الحجم ليس مهمًا على الشبكات المحلية ، ويتم التخلص من الاختلاف عن طريق التصغير.

نظرًا لأن TS هي JS ، فعلينا حقًا الامتثال.

حسنًا ، كروكفورد هو رجل عجوز غاضب بعض الشيء ، لذا آخذه مع حبة ملح.

كانت هناك إحصائية على Reddit منذ فترة حيث قام شخص ما بتحليل جزء لائق من Github وكان 60٪ / 40٪ لصالح المساحات. أنا نفسي وجميع الأماكن التي عملت فيها حتى الآن كانت علامات تبويب (على الرغم من أن جزءًا كبيرًا منها كان AS3). إنه يعمل بشكل جيد تمامًا. تعد محاذاة الكود مضيعة للوقت ولكن إذا لزم الأمر ، تعمل علامات التبويب الذكية بشكل جيد هناك أيضًا.

اللعنة الحقيقية التي أريد التخلص منها مختلطة _الأحرف_. قبل أن ننتقل إلى استخدام نووي حراري على أحدهما أو الآخر خلال الريبو بأكمله ، على الأقل يجب أن يكون متسقًا _ لكل ملف_.

في مرحلة ما ، سنفعل # 2228 ولكن هذه خطوة كبيرة جدًا (نلغي الكثير من السمات حتى نتمكن من السماح لـ @ dt-bot بالقيام بذلك).

حسنًا ، كروكفورد هو رجل عجوز غاضب بعض الشيء ، لذا آخذه مع حبة ملح.

متفق عليه

إذا شعرت بالملل في أي وقت ، أنصحك بقراءة طلبات السحب المقدمة إلى JSON.js. يتم تقديمها دائمًا من قبل أشخاص لا يعرفون طرق دوج المنفتحة قليلاً. تم رفضهم جميعًا :-)

شاهدت هذا للتو: https://github.com/iplabs/typescript/blob/languageService-v2/src/services/languageService.ts#L199 -L213 الإعدادات الافتراضية هي 4 مسافات مع تحويل علامات التبويب إلى مسافات

    export class EditorOptions {
        public IndentSize: number = 4;
        public TabSize: number = 4;
        public NewLineCharacter: string = "\r\n";
        public ConvertTabsToSpaces: boolean = true;

        public static clone(objectToClone: EditorOptions): EditorOptions {
            var editorOptions = new EditorOptions();
            editorOptions.IndentSize = objectToClone.IndentSize;
            editorOptions.TabSize = objectToClone.TabSize;
            editorOptions.NewLineCharacter = objectToClone.NewLineCharacter;
            editorOptions.ConvertTabsToSpaces = objectToClone.ConvertTabsToSpaces;
            return editorOptions;
        }
    }

يا إلهي!

إن CRLF غبية بعض الشيء لكن أيا كان.

ربما يجب علينا فقط أن نذهب من أجلها. سأحاول تشغيل منسق الطباعة على كل شيء وأرى ما سيحدث.

عزيزي اللورد يا له من مسلخ .. إجمالي 562 ملف .d.ts مع 446 ملف تم تغييرها ..

https://github.com/Bartvds/DefinitelyTyped/tree/34907936bfc22562f30bb09ee82282ca0515b8b3

https://github.com/Bartvds/DefinitelyTyped/commit/34907936bfc22562f30bb09ee82282ca0515b8b3

عذرًا ، لم نتمكن من عرض الاختلافات بالكامل نظرًا لتغيير عدد كبير جدًا من الملفات (446)

هيه.

وأجرى الاختبارات أيضًا:

https://github.com/Bartvds/DefinitelyTyped/tree/46f9d17b2b074c887bff35b06112070b28924248

https://github.com/Bartvds/DefinitelyTyped/commit/46f9d17b2b074c887bff35b06112070b28924248

عذرًا ، لم نتمكن من عرض الاختلافات بالكامل نظرًا لتغيير عدد كبير جدًا من الملفات (442).

لطيف - جيد. إذاً لدينا التكنولوجيا ، كان هذا هو الجزء السهل. لكن علينا الآن أن نقرر ما إذا كان هذا شيئًا نريده لأنه سيكون له بعض التأثير الخطير.

لأن إسناد سطر واحد سيذهب إلى الجحيم. وإذا قبلنا ذلك ، فمن المحتمل أن نفرض التنسيق في المختبر. لدي إعداد TSLint في المختبر (لكنه معطل) لذلك يمكن أن يفعل الكثير.

ربما يجب علينا تحسين المُختبِر إلى استخدام CLI يمكنه تشغيل المُنسق وتنفيذ الاختبارات ، بطريقة جيدة قابلة للاستخدام (يعمل الترتيب الآن محليًا ولكن يجب تحسينه باستخدام CLI api النظيف وما إلى ذلك).

أقول كلما كان ذلك أفضل. لكن الخبر السار هو أنك لن تفقد تاريخ اللوم . كنت أتمنى أن يكون GitHub قد نفذ هذه الميزة أيضًا في طريقة عرض الاختلافات الخاصة بهم.

نعم ، لكن من السيء أن git blame -w -M لا يعمل عبر الإنترنت. لقد قمت للتو بإرسال بريد إلكتروني إلى دعم Github حول هذا الموضوع.

Bartvds ، أي رد من جيثب ؟!

تجاهل المسافات البيضاء في عرض اللوم على GitHub غير ممكن حاليًا ، ولكن قد نضيفه في المستقبل. شكرًا على الاقتراح ، سأضيفه إلى قائمة طلبات الميزات حتى يتمكن الفريق من رؤيته.

لذلك قد يستغرق بعض الوقت ، إذا كان هناك أي وقت مضى.

لا يهمني ما يقوله أي من الأشخاص الذين يعرفون كل شيء أو أدلة الأنماط المفترضة - علامات تبويب المسافة البادئة هي الطريقة الوحيدة للحفاظ على نية المطور عند تضمين المحاذاة. انظر بلوق وظيفة حول هذا الموضوع .

use-tabs-for-indentation-spaces-for-alignment-anim

محاذاة الكود (المحاذاة على var و = في حالتك) مفهوم جيد. لكن من الصعب الحفاظ عليها في إعادة البناء. لذلك أنا فقط لا أستخدمه. كما أن أدوات التنسيق التلقائي لا تحترمها ، مثل كود التنسيق التلقائي في TypeScript

أيضا من أجل

  public string FirstName { get; set; }        =>  public  string  FirstName { get; set; }    
  public string Surname { get; set; }          =>  public  string  Surname   { get; set; }
  public int Age { get; private set; }         =>  public  int     Age       { get; private set; }
  private Address Address { get;  set; }       =>  private Address Address   { get; set; } 

أضف خاصية جديدة وتحتاج إلى _reformat_ كل هذه الأسطر. ليس تغيير رمز جيد للمراجعة.

قد يكون سير عملك مختلفًا وقد يسمح بذلك. إنه يجعل من السهل قراءة (الكود كفن) لكنني لم أتمكن من تجربة الفرق التي تتحرك.

إنه أغرب شيء. رد فعلي الغريزي على فكرة خلط علامات التبويب والمسافات هو الارتعاش والتفكير "هذا مجرد قذارة!"

أنا أعلم أنه غير عقلاني تمامًا - ولكنه صادق تمامًا. البشر غريبون ...

johnnyreilly أنت ضحية خاطئ شائع . إن استخدام علامات الجدولة للمسافات البادئة والمسافات للمحاذاة ليس هو نفسه _mixing_ tabs مع المسافات. من الواضح أنك لم تقرأ منشور المدونة.

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

basarat ، أنا أتفق معك تمامًا. نادرًا ما أعمل في مشاريع ذات محاذاة التعليمات البرمجية ، لكني أراها من وقت لآخر. إذا تمكنت بطريقة ما من فرض أن المطورين في مشروعك لا يستخدمون المحاذاة على الإطلاق ، فسأقول لهم أن يفعلوا ذلك. بخلاف ذلك ، مع وجود مسافات للمسافات البادئة ، لا توجد طريقة لأدوات الفحص ، من بين أمور أخرى ، للتمييز بين ما كان مخصصًا للمسافة البادئة مقابل ما كان مخصصًا للمحاذاة ، خارج تحليل الشفرة إلى CST (المبالغة في الطريق).

بالطبع ، هناك مجموعة من الأسباب الأخرى لعدم استخدام المسافات البادئة في هذا العصر الحديث. يتعامل المحررون جيدًا مع علامات التبويب ، لكنهم لا يمتلكون مسافات أبدًا. التنقل باستخدام مفتاح السهم ، والحذف ، والمسافة للخلف - لا يتعاملون مع مسافة بادئة واحدة للمسافات مثل وحدة واحدة. لقد استخدمت Visual Studio و Sublime و PHPStorm و Notepad ++ ، لكن لديهم جميعًا هذه المشكلة الأساسية مع المسافات البادئة.

التنقل باستخدام مفتاح السهم ، والحذف ، والمسافة للخلف - لا يتعاملون مع مسافة بادئة واحدة للمسافات مثل وحدة واحدة.

التنقل: أستخدم ctrl + مفاتيح الأسهم. يقفزون المسافات (كل المسافات البيضاء حقًا) + الكلمات.

للحذف / مسافة للخلف: بالنسبة لاختيار الكلمات ، أستخدم توسيع الكلمة (ctrl + w من الإعدادات الافتراضية لإعادة صياغة الكلمات) وإلغاء التحديد (ctrl + shift + w). نادرًا ما أحتاج إلى تحديد مسافة بيضاء داخل الجانب ، ما عليك سوى استخدام علامة التبويب (زيادة المسافة البادئة) وإزاحة علامة التبويب (تقليل المسافة البادئة).

jedmao في الواقع لقد فهمت وجهة نظرك - كنت أشارك فقط رد فعلي الغريزي (وغير المنطقي). لم أقل أنه منطقي: ابتسم:

تضمين التغريدة

basarat أستخدم Home و End في بعض سيناريوهات المسافات البيضاء. لقد حاولت استخدام التنقل Ctrl + arrow key ولكنه لا يعمل دائمًا. هذا هو السبب في أنني نادرًا ما أستخدمه بسبب الاتساق العقلي. خذ بعين الاعتبار المثال التالي:

for (var i = 0; i < 10; i++) {
    if (i > 5) {
        console.log('I am greater than 5');
    }
}

لنفترض أن مؤشري في بداية السطر 3 وأريد الانتقال إلى بداية السطر 2.

باستخدام أسلوبك في Sublime ، يمكنني القيام بذلك بإحدى طريقتين:

  • Up ، Hold Ctrl ، Left ، Release Ctrl (4 خطوات منطقية)
  • Hold Ctrl ، Left ، Release Ctrl ، Up ، Hold Ctrl ، Right ، Left ، Release Ctrl (8 خطوات منطقية)

في Visual Studio ، يمكن تقليل السيناريو الثاني إلى 7 خطوات منطقية.

  • Hold Ctrl ، Left ، Release Ctrl ، Up ، Hold Ctrl ، Right ، Release Ctrl (7 خطوات منطقية)

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

  • Left ، Up

فشلت في معرفة كيف سيساعد اختيار الكلمات في حذف مسافة بادئة متباعدة أو التباعد عنها. أحاول ذلك في Visual Studio دون نجاح. هذا هو السبب في أنني أنشأت البرنامج المساعد TabSanity لبرنامج Visual Studio . لسوء الحظ ، لست على علم بهذه المكونات الإضافية للمحررين الآخرين.

باستخدام أحرف الجدولة الفعلية ، تكون دائمًا خطوتان منطقيتان بدون مفاتيح تعديل. لا يمكن أن يكون أبسط

: +1: أرى ميزتك. ومع ذلك ، أثناء تعديل هذا التعليق ، يعمل ctrl وما إلى ذلك بنفس طريقة VS الخاصة بي ، لذا تنتقل عاداتي ؛)

فشلت في معرفة كيف سيساعد اختيار الكلمات في حذف مسافة بادئة متباعدة أو التباعد عنها

سيئ ، وصفي كان محيرا. تجاهل بت التحديد "كلمة". فقط ركز على I rarely need to select inside whitespace though, just use tab (increase indent) and shift tab (decrease indent). إنه يعمل مع المسافات البادئة على ما يرام.

باستخدام أحرف الجدولة الفعلية ، تكون دائمًا خطوتان منطقيتان بدون مفاتيح تعديل.

ماذا عن :

public  string  FirstName { get; set; }    
public  string  Surname   { get; set; }
public  int     Age       { get; private set; }
private Address Address   { get; set; } 

ألن يكون الانتقال من بداية Age لتغيير نوع Surname أي أن string في السطر السابق هو نفس السيناريو Ctrl ؟

basarat أستخدم Tab و Shift+Tab دينياً ؛ على الرغم من ذلك ، عادةً لأسطر متعددة من التعليمات البرمجية. أعتقد أنه يمكنك القول أن Shift+Tab هو اسم مستعار جيد لضغط مفتاح backspace على علامة تبويب ، لكن من الواضح أنه ليس بسيطًا أو بديهيًا مثل backspace .

Ctrl+Delete أقرب اسم مستعار للمفتاح Delete ، لكن لديه القدرة على حذف أكثر من مسافة بادئة واحدة ؛ بينما ، مفتاح Delete بسيط في علامة تبويب يزيل مسافة بادئة واحدة فقط. العمل أحيانًا وليس الآخرين هو سبب عدم استخدامه على الإطلاق (الاتساق العقلي).

أنا ، مثلك ، نادرًا ما أحتاج ، إن وجدت ، إلى تحديد مساحة بيضاء داخلية. لم أقترح أبدًا أن أفعل ذلك. أنا لا أحدد المسافة البيضاء ، لكنني أتنقل خلالها للوصول إلى مكان ما. مثال المحاذاة أعلاه هو بالتأكيد عندما أستخدم التنقل Ctrl + arrow key . هذا هو السبب ، كما قلت من قبل ، نادرًا ما أستخدم التنقل Ctrl + arrow key لأن السيناريو الذي أشرت إليه هو على الأرجح الحالة الوحيدة التي سأستخدمها فيه.

في نهاية اليوم ، أكثر ما يزعجني هو أنه عليك تغيير ذاكرة عضلاتك تمامًا عند التبديل بين ملف به علامات تبويب للمسافات البادئة مقابل مسافات المسافة البادئة. ما هو فعال (أقل خطوات منطقية) في ملف به علامات تبويب للمسافة البادئة ببساطة لا يعمل في ملف به مسافات للمسافة البادئة. يمكنك إلقاء اللوم على المحررين لعدم منحك تجربة سلسة ، لكن هذا ليس عدلاً لأنه من المستحيل حرفيًا (بدون CST) للمحررين وضع افتراضات في ملف به مسافات للمسافات البادئة حول ما هي المسافة البادئة وما هو المحاذاة.

الأمر الأكثر إحباطًا هو أنه من الصعب جدًا على الناس التعرف عليه. فضاءات التثليم شر خالص ... لها قرون.

الاستنتاج النهائي؟ أريد فقط المساهمة ، ما الذي تستخدمه بحق الجحيم؟

الاستنتاج النهائي؟ أريد فقط المساهمة ، ما الذي تستخدمه بحق

متسقة لكل ملف. لا تخلط هذه في ملف

basarat الكوميدي خاطئ. نعلم جميعًا أن رجل Apple سيستخدم مسافات وسيستخدم رجل Microsoft علامات التبويب.

jedmao أنا رجل MS

أعتقد أن # 4211 اقتراح جميل.

أقترح استخدام مسافتين كما هو الحال في دليل أسلوب airbnb / جافا سكريبت ...

اقتراح: استخدم معايير الترميز التي وضعتها المكتبة التي تتم كتابتها. إذا كانت المكتبة التي يتم كتابتها تستخدم مسافات وعلامات اقتباس فردية و LFs ، فافعل الشيء نفسه في تعريف النوع. بهذه الطريقة يمكننا تجنب حجة المسافات مقابل علامات الجدولة.

المشكلة الوحيدة هي أنه لن يكون من السهل تطبيق هذه القاعدة. إذا كنت بحاجة إلى تطبيقه ولديك اتساق كامل ، فإنني أوصي باتباع أكثر الاتفاقيات شيوعًا. وفقًا لهذا الموقع ، فهو عبارة عن مسافات وعلامات اقتباس فردية.

أفضلي الشخصي هو المسافات (4) وعلامة الاقتباس المزدوجة ، لكني لا أوافق على استخدام علامات الاقتباس المفردة إذا كان ذلك يعني أن كل شيء متسق.

هل يمكن لمستخدمي pro-tab و pro-tab-space قبول حل وسط مماثل؟

أفضّل شخصيًا هو المسافات (4) وعلامات الاقتباس المزدوجة ، لكنني لا أوافق على استخدام علامات الاقتباس المفردة إذا كان ذلك يعني أن كل شيء متسق.

@ glen-84 فقط للتسلية ... هنا لماذا استخدم فريق المترجم علامات الاقتباس المزدوجة: https://github.com/Microsoft/TypeScript/issues/5811#issuecomment -160187924

  • جسون
  • يعمل عبر جميع اللغات ، لذا فهو أقل عبئًا معرفيًا

أنا شخصياً أختار اقتباسات فردية لأنني أجد نفسي أقوم بالمزيد والمزيد من TypeScript حصريًا: rose:

أعتقد أنه أيضًا أكثر وضوحًا ، وكان 57٪ مقابل 43٪ (ليس فرقًا كبيرًا) ، لكن أعتقد أنه يجب عليك رسم الخط في مكان ما. =)

تعجبني نقطة

الكشف الكامل: أنا قادم من Go-land حيث لدينا go fmt ولا توجد مناقشات حول علامات التبويب أو المسافات على الإطلاق .. إنها علامات تبويب للمسافات البادئة والمسافات للمحاذاة وهي تعمل بشكل جيد جدًا: +1:

مساحات بالطبع. لأن لا أحد يعرف كيف يتم عرض علامات التبويب بالضبط في برامج تحرير مختلفة إذا تم استخدامها في مكان آخر.

hinell لماذا يهم إذا تم عرض علامات التبويب بشكل مختلف في المحررين المختلفين؟ لا ينبغي ذلك ، طالما أن علامات التبويب مستخدمة "فقط" للمسافة البادئة.

أفضل علامات التبويب ، خاصة بسبب هذا: http://nickgravgaard.com/elastic-tabstops/

تبين أن هناك سببًا أكبر لاستخدام علامات التبويب: إمكانية وصول المطور .

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