import { A, B, C } from './file';
console.log('No imports used');
export const D = 4;
بتهيئة tslint.json
:
{
"rules": {
"no-unused-variable": [true, {"ignore-pattern": "^_"}]
}
}
The 'no-unused-variable' rule threw an error in '/Users/andrew.mitchell/Documents/Projects/test/test.ts':
TypeError: Cannot read property '1' of null
at walk (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/rules/noUnusedVariableRule.js:105:54)
at Rule.AbstractRule.applyWithFunction (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/language/rule/abstractRule.js:39:9)
at Rule.applyWithProgram (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/rules/noUnusedVariableRule.js:32:21)
at Linter.applyRule (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:194:29)
at /Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:139:85
at Object.flatMap (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/utils.js:151:29)
at Linter.getAllFailures (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:139:32)
at Linter.lint (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:99:33)
at /Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/runner.js:209:32
at step (/Users/andrew.mitchell/Documents/test/node_modules/tslint/node_modules/tslib/tslib.js:133:27)
يجب أن تحذر القاعدة All imports in import declaration are unused.
للسطر 1.
يحدث هذا بسبب noUnusedVariableRule.ts # L123 لأن الرسالة failure
هي All imports in import declaration are unused.
، والتي لا تحتوي على اسم متغير ليتم العثور عليه في regex.
تعمل هذه القاعدة بشكل صحيح إذا لم يتم تحديد الخيار ignore-pattern
لأنه لن يحاول التحقق من اسم المتغير.
البحث الجيدhotforfeature. لقد بدأت في معالجة هذا الأمر في https://github.com/palantir/tslint/pull/3919 لأنه يتعلق ببعض التغييرات القادمة في TS 2.9 والتي لن تؤدي إلا إلى تفاقم هذه المشكلة.
يمنع PR الخاص بي من طرح استثناء ، ومع ذلك ، فإنه يتجاهل ببساطة ignorePattern
في الحالات التي ذكرتها والتي ليست رائعة. أعتقد أننا سنحتاج إلى إضافة نوع من الأكواد المعقدة مثل ما نفعله لاستيراد التصحيحات التلقائية الآن: /
أنا أتساءل عما إذا كان ينبغي لنا أن نتجاهل هذه القاعدة. يوفر tsc الآن طريقة لتجاهل تحذيراته ، ويوفر دعمًا للإصلاحات التلقائية لتحذيراته من خلال IDE.
بقدر ما أستطيع أن أرى ، الفائدة الرئيسية لهذه القاعدة هي ignore-pattern
، لكن من الصعب تنفيذ ذلك بشكل صحيح بالطريقة التي تتم بها كتابة القاعدة الآن للاعتماد على تشخيصات tsc. يعتبر TSLint أيضًا أكثر مرونة بقليل من tsc w / فيما يتعلق بتعطيل القواعد في ملفات معينة. suchanlee أي أفكار حول كل هذا؟ أعلم أنك قد أصلحت هذه القاعدة مؤخرًا
حالة الاستخدام الأساسية الخاصة بي لهذه القاعدة هي الإصلاح التلقائي للمشكلات عند الالتزام بخطاف بوابة عند الفحص. لذلك ما زلت أعتقد أن هناك قيمة كبيرة هنا حتى لو كانت tsc تقدم شيئًا عبر عمليات تكامل IDE.
JKillian أعتقد أن القاعدة بدأت تصبح مكلفة بشكل متزايد لدعمها بدعم TSLint لإصدارات متعددة من Typescript والتغييرات المستمرة في سلوك Typescript. ونظرًا لأن Typescript تدعم الميزة ، يجب أن نميل إلى استخدامها. ولكن نظرًا لأن الإصدارات السابقة من TS لا تدعمها ، فلا أعتقد أنه يجب علينا حذفها. ومع ذلك ، أعتقد أننا يجب أن نبدأ في التفكير في إهمال القاعدة والعمل مع أفراد TS لدعم تدفقات عمل TSLint الحالية مع TS بشكل أفضل.
أود أن أؤيد اقتراح
hotforfeature - اعترف بحالة الاستخدام الخاصة بك ووجدها معقولة. ومع ذلك ، نظرًا لتعقيد القاعدة ، أعتقد أننا سنقوم بإهمالها (انظر # 3919).
كما هو الحال دائمًا ، نرحب بأي شخص لنسخ الكود المصدري للقاعدة ونقله إلى حزمة خارجية والاستمرار في استخدامه / تحسينه بهذه الطريقة!
لما يستحق:
{
"compilerOptions": {
"noUnusedLocals": true,
"noUnusedParameters": true,
}
}
استخدام ما ورد أعلاه في tsconfig
يسمح بتعطيل قاعدة lint no-unused-variable
.
no-unused-variable
متوقف الآن ، و compilerOptions
أعلاه هو الحل الرسمي الآن.
تحديد noUnusedLocals
و noUnusedParameters
في compilerOptions
ليس هو نفسه تمامًا مثل no-unused-variable
الخاص بـ tslint. اعتبارًا من الآن ، إما أن تتسبب المتغيرات غير المستخدمة في تعطل البنية أو تظل غير ملحوظة ولا يوجد وضع تحذير بعد الآن 😞
giladgray ، كتب killtheliterate :
يسمح استخدام ما سبق في tsconfig بتعطيل قاعدة النسالة غير المستخدمة.
لا أريد تعطيل هذه القاعدة ، لأنه كما كتب kachkaev
تحديد
noUnusedLocals
وnoUnusedParameters
فيcompilerOptions
ليس هو نفسه تمامًا مثلno-unused-variable
بـ tslint
حالة الاستخدام الخاصة بي هي رمز تم إنشاؤه. أريد أن يتبع الكود الخاص بي المكتوب يدويًا هذه القاعدة ، ولكن لتجنب جعل منشئ الشفرات معقدًا بشكل كبير ، أود تعطيل هذه القاعدة في الكود المُنشأ (أو على الأقل في بعض أقسام الكود المُنشأ) - وهذا شيء ما يمكن ' أن يتم ذلك باستخدام خيارات برنامج التحويل البرمجي TypeScript 😞
على الأقل ، يجب توثيق هذا الإهمال على موقع TSLint على الويب ، لكنني أوافق بشدة على أن هذا الإهمال سابق لأوانه. أي خطط لإعادة النظر؟ هل سيتم قبول مساهمة المجتمع؟
هذا الاستخفاف سخيف. إشارات المترجم هي بديل رهيبة. يكسرون البناء ولا يصلحون أنفسهم. كيف يكون هذا حلاً معقولاً لتوجيه الناس إليه؟ إذا كان الخيار ignore-pattern
صعبًا جدًا لإنجاز العمل الآن ، فقم بإيقافه بدلاً من ذلك.
👋 أيها الناس - فقط قم بربط هذا بـ https://github.com/palantir/tslint/issues/4232. من المفهوم جيدًا والمتفق عليه أن خيارات المحول البرمجي المضمنة _ ليست بديلاً كافيًا لـ no-unused-variable
. لم يعمل التنفيذ الأصلي للقاعدة بشكل جيد مع أدوات TS الأخرى وكان لابد من تعطيله. # 4232 المسارات لإيجاد طريقة لتمكينها مرة أخرى.
في غضون ذلك ، يمكنك استخدام شيء مثل tsc --noEmit --noUnusedLocals --noUnusedParameters
كأداة منفصلة لاستخدام الشيكات المضمنة. نعم ، هذا ليس جيدًا مثل no-unused-variables
القابل للتكوين.
أكمل المناقشة في # 4100 & # 4232
التعليق الأكثر فائدة
تحديد
noUnusedLocals
وnoUnusedParameters
فيcompilerOptions
ليس هو نفسه تمامًا مثلno-unused-variable
الخاص بـ tslint. اعتبارًا من الآن ، إما أن تتسبب المتغيرات غير المستخدمة في تعطل البنية أو تظل غير ملحوظة ولا يوجد وضع تحذير بعد الآن 😞