Tslint: تحذير: تتطلب قاعدة "no-unused-variable" فحص كتابة الرسالة ...

تم إنشاؤها على ١٦ يونيو ٢٠١٧  ·  46تعليقات  ·  مصدر: palantir/tslint

تقرير الشوائب

بتكوين tslint.json :

{
  "rulesDirectory": [
    "node_modules/codelyzer"
  ],
  "rules": {
    "arrow-return-shorthand": true,
    "callable-types": true,
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "curly": true,
    "eofline": true,
    "forin": true,
    "import-blacklist": [
      true,
      "rxjs"
    ],
    "import-spacing": true,
    "indent": [
      true,
      "spaces"
    ],
    "interface-over-type-literal": true,
    "label-position": true,
    "max-line-length": [
      true,
      140
    ],
    "member-access": false,
    "member-ordering": [
      true,
      {
        "order": [
          "public-static-field",
          "protected-static-field",
          "public-static-method",
          "protected-static-method"
        ]
      }
    ],
    "no-arg": true,
    "no-bitwise": true,
    "no-console": [
      true,
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "no-construct": true,
    "no-debugger": true,
    "no-duplicate-super": true,
    "no-empty": false,
    "no-empty-interface": true,
    "no-eval": true,
    "no-inferrable-types": [
      true,
      "ignore-params"
    ],
    "no-unused-variable": true,
    "no-misused-new": true,
    "no-non-null-assertion": true,
    "no-shadowed-variable": true,
    "no-string-literal": false,
    "no-string-throw": true,
    "no-switch-case-fall-through": true,
    "no-trailing-whitespace": true,
    "no-unnecessary-initializer": true,
    "no-unused-expression": true,
    "no-var-keyword": true,
    "object-literal-sort-keys": false,
    "one-line": [
      true,
      "check-open-brace",
      "check-catch",
      "check-else",
      "check-whitespace"
    ],
    "prefer-const": true,
    "quotemark": [
      true,
      "single"
    ],
    "radix": true,
    "semicolon": [
      "always"
    ],
    "triple-equals": [
      true,
      "allow-null-check"
    ],
    "typedef-whitespace": [
      true,
      {
        "call-signature": "nospace",
        "index-signature": "nospace",
        "parameter": "nospace",
        "property-declaration": "nospace",
        "variable-declaration": "nospace"
      }
    ],
    "typeof-compare": true,
    "unified-signatures": true,
    "variable-name": false,
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],
    "directive-selector": [
      true,
      "attribute",
      "app",
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      "app",
      "kebab-case"
    ],
    "use-input-property-decorator": true,
    "use-output-property-decorator": true,
    "use-host-property-decorator": true,
    "no-input-rename": true,
    "no-output-rename": true,
    "use-life-cycle-interface": true,
    "use-pipe-transform-interface": true,
    "component-class-suffix": true,
    "directive-class-suffix": true,
    "no-access-missing-member": true,
    "templates-use-public": true,
    "invoke-injectable": true
  }
}

ما الخطأ الذي أفعله بالضبط؟

  • __ إصدار TSLint__: 5.4.3
  • __نسخة TypeScript__: 2.3.4
  • __ تشغيل TSLint عبر__: الغزل وسطر الأوامر

السلوك الفعلي

عند تشغيل tslint بالمعلمات التالية:

tslint --type-check --project tsconfig.json  src/**/*.ts

أتلقى التحذير أدناه:

Could not find implementations for the following rules specified in the configuration:
    Warning: The 'no-unused-variable' rule requires type checking
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.

سلوك متوقع

وفقًا لوثائق tslint التي يجب القيام بها ، فكل ما علي فعله هو تمرير --type-check --project tsconfig.json ولكن لا يبدو أنه يعمل.

Question

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

إذا ألقيت نظرة على الملف التمهيدي VSCode 1.19 ، فهناك ميزة جديدة لترتيب هذا والقواعد الأخرى كتحذيرات.
بالنسبة لنا ، فهذا يعني:

  • إزالة "no-unused-variable" من tslint.json
  • أضف "noUnusedLocals" إلى tsconfig.json

يتم ترك القواعد الأخرى كتدريب للقارئ ؛-)

لاحظ أن tslint هو هذا الامتداد ، بينما tsconfig هو سلوك VSCode المدمج.

ال 46 كومينتر

يرجى ملء نموذج القضية. كيف يبدو ملف tslint.json الخاص بك؟

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

لقد قمت أيضًا بالتحديث لاستخدام نموذج المشكلة.

في وقت ما بعد تحديث tslint (ربما v4 -> v5) ، لا يتوفر no-unused-variable بدون وسائط --type-check ، --project .

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

في وقت ما بعد تحديث tslint (ربما v4 -> v5) ، لا يتوفر متغير no-unused-variable بدون وسيطات - type-check، --project.

أقوم بتمرير - مشروع بـ tslint --type-check --project tsconfig.json src/**/*.ts

لا أواجه هذه المشكلة على جهاز الكمبيوتر المنزلي الخاص بي ، لكنني أواجه هذه المشكلة على كمبيوتر العمل.

everedifice كانت هناك أخطاء في تنفيذ القاعدة ، لقد https://github.com/palantir/tslint/pull/2235.

mastrauckas لا يمكنني مساعدتك حقًا بدون مزيد من التفاصيل حول الاختلافات بين

adidahiya كنت أحصل على هذا على جهاز كمبيوتر ثالث وهو نظام macOS الليلة الماضية أيضًا. سأحاول مرة أخرى على جهاز الكمبيوتر المنزلي الخاص بي مرة أخرى لمعرفة ما إذا كان لا يزال يحدث.

بشكل عام:
الكمبيوتر 1: Windows 10 محدث تمامًا وحتى الآن لا أحصل على error .
الكمبيوتر 2: تم تحديث macOS بالكامل وأحصل على error .
الكمبيوتر 3: تم تحديث Windows 7 بالكامل وأحصل على error .

everedifice لقد نشرت للتو إصدارًا جديدًا من tslint-consistent-codestyle بقاعدة جديدة no-unused والتي تشبه في الغالب no-unused-variable مع بعض الميزات الإضافية ولكن دون الحاجة إلى استخدام --project --type-check .

إذا كنت مهتمًا ، يمكنك العثور على المستندات هنا: https://github.com/ajafff/tslint-consistent-codestyle/blob/master/docs/no-unused.md

يبدو أن الكمبيوتر الذي اعتقدت أنه لا يعاني من المشكلة يعاني من المشكلة بعد كل شيء. هذا الخلل؟

أي شيء جديد في هذه القضية؟

لدي نفس المشكلة.

نفس المشكلة ، ولكن مع كل من "تحذير: تتطلب القاعدة" no-unused-variable "معلومات النوع."
و "تحذير: تتطلب قاعدة" عدم الاستخدام قبل الإعلان "معلومات النوع." (أستطيع أن أرى أن الخطأ المطبعي في "المعلومات" قد تم إصلاحه بين الإصدار 5.5.0 و 5.7.0 ، ولكن هذا هو الشيء الوحيد الذي تغير). أنا أقوم بتشغيله مع نسخة مطبوعة 2.4.1. أي أخبار عن تلك المشكلة؟

نفس المشكلة هنا

هل تم حل هذه المشكلة أم أي إصلاح مؤقت لإيقاف عرض التحذيرات.

لا أعتقد أنه تم إصلاحه. لا أعتقد حتى أنهم قبلوا كقضية.

إصلاح دائم ، استخدم no-unused-variable في tsconfig.json بدلاً من tslint.json. إذا كان المترجم قادرًا على توفير نفس الوظيفة ، فليس من المنطقي القيام بذلك باستخدام linter.

تقدمAnimaMundi الوظيفة نفسها ، ولكن عند تشغيل tslint كجزء من عملية CI ، يجب وضع علامة عليها أثناء الاختبار ، وليس أثناء الإنشاء. لا أوافق على أنه يجب تجاهل / إزالة هذا لأن المترجم يقوم بذلك في وقت الإنشاء.

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

على غرار إصلاح AnimaMundi ، استخدمت noUnusedLocals و noUnusedParameters في tsconfig.json الخاص بي. تظهر الأخطاء في جزء "المشاكل".

AnimaMundihaswaltkeego تمت مناقشة مزايا قاعدة الوبر مقابل التحقق من المترجم عن المتغيرات غير المستخدمة على نطاق واسع في سلاسل TSLint الأخرى (https://github.com/palantir/tslint/issues/1481 والمواضيع المرتبطة) ؛ هذه القضية ليست في الحقيقة المكان المناسب لها.

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

التأجيل للمترجم لا يفعل الشيء نفسه: المترجم لديه خيار واحد فقط: FAIL.
سبب التعامل مع الأمر tslint هو أنه غالبًا ما يحتاج إلى تحذير (تمايل أخضر مقابل أحمر).

لا يمكن فقط عرض مشاكل tslint كتحذيرات ولكن يمكن أيضًا تجاهلها على أساس واحد ، بينما لا يمكن أن تكون أخطاء الترجمة المطبوعة

تم بالفعل تجزئة جميع هذه النقاط (انظر تعليقي الأخير والمواضيع المرتبطة). ليس هناك ما يمنعك من استخدام no-unused-variable كقاعدة TSLint الآن. لست متأكدًا مما تحاول تعليقات المتابعة هذه تحقيقه.

mastrauckas هل ما زلت تواجه مشاكل مع هذه القاعدة؟ تم إهمال العلامة --type-check ، ولكن --project مطلوب لتمكين القواعد القائمة على فحص النوع.

جانبا: مع TS 2.6 ، يمكنك استخدام // @ts-ignore لمنع أخطاء المترجم.

adidahiya كنت مجرد رد على التعليقات أعلاه التي تدعي أنه لا يوجد سبب لجعل هذا كقاعدة نسالة بدلاً من قاعدة مترجم.

لكنك على حق أعتقد أن المشكلة ذات الصلة تتعلق بامتداد vscode وليس tslint نفسه. tbh كان هناك العديد من المشكلات حول هذا الموضوع لدرجة أنني استغرقت بعض الوقت لمعرفة سبب عدم نجاحه وأين.

نقدر الحافة. سأقوم بالتبديل مرة أخرى إلى استخدام إعداد المترجم بمجرد التبديل إلى 2.6

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

تلقيت نفس التحذير في أحدث 1.19 VS Code The 'no-unused-variable' rule requires type information مع هذا (انظر أدناه). هل التكوين الخاص بي يفتقد شيئا؟

{
  "extends": "tslint:recommended",
  "rules": {
    "linebreak-style": [true, "LF"],
    "quotemark": [true, "single", "avoid-escape", "avoid-template"],
    "no-console": false,
    "no-unused-expression": false,
    "ordered-imports": false,
    "member-access": [true, "no-public"],
    "object-literal-sort-keys": false,
    "curly": [true, "ignore-same-line"],
    "semicolon": [true, "never"],
    "no-var-requires": false,
    "no-unused-variable": true
  }
}

إذا ألقيت نظرة على الملف التمهيدي VSCode 1.19 ، فهناك ميزة جديدة لترتيب هذا والقواعد الأخرى كتحذيرات.
بالنسبة لنا ، فهذا يعني:

  • إزالة "no-unused-variable" من tslint.json
  • أضف "noUnusedLocals" إلى tsconfig.json

يتم ترك القواعد الأخرى كتدريب للقارئ ؛-)

لاحظ أن tslint هو هذا الامتداد ، بينما tsconfig هو سلوك VSCode المدمج.

لقد اخترت إزالة no-unused-variable حيث يبدو أن VS 1.19 أبلغ عن هؤلاء بالفعل.

لا أفهم ما علاقة VSCode بهذا. لا يكفي أن يتعامل VSCode فقط مع هذه التحذيرات ، فأنا بحاجة إلى عدم فشل تصميم ساعة خادم webpack الخاص بي بسببها. هل هناك بديل لـ no-unused-variable ، بصرف النظر عن المحررين المعينين

  • يتم التعامل معها كتحذير أثناء التطوير
  • فشل يبني أثناء CI

؟

pelotom ، تمت إعادة توجيه العديد من الأشخاص هنا من امتداد VSCode TSLint ، على سبيل المثال من https://github.com/Microsoft/vscode-tslint/issues/219

حتى الآن ، لم يكن TS قادرًا على إظهار بعض المشكلات كتحذيرات (تمايل خضراء) ، لكن Lints (ESlint ، TSLint) كان قادرًا على ذلك. لذلك كنا نسأل لماذا لا تبلغ TSlint عن المتغيرات غير المستخدمة كتحذيرات. ولكن اعتبارًا من 1.19 ، يمكن لـ TS الخاص بـ VSCode إجراء هذه التحذيرات ونحن نسحب من هذه المشكلة 😉

لكي أكون واضحًا ، أستخدم VSCode أيضًا وأود أيضًا أن أرى هذه التحذيرات مظللة في المحرر ، لكن إعدادات VSCode تبدو وكأنها الطبقة الخاطئة التي يجب _تكوينها_ خطورة أخطاء المترجم ، حيث إنها لا تؤثر على بقية سلسلة الأدوات.

أتفق معك يا توم ، وآمل أن يتم العثور على الحل حيث يحصل كل من المحرر وكذلك إجراءات البناء / CI على الدعم المناسب. لقد رأينا حتى الآن معارضة قوية (تبدو مبررة) والبعض (بما في ذلك أنا) سيأخذ ما في وسعنا ، اليوم ، مع الحفاظ على الأمل في حل حقيقي.

إذا ألقيت نظرة على الملف التمهيدي VSCode 1.19 ، فهناك ميزة جديدة لترتيب هذا والقواعد الأخرى كتحذيرات.

rnemec أعتقد أنك قصدت كتابة "ملاحظات الإصدار" بدلاً من "التمهيدي". كنت غبيًا بما يكفي للبحث عن التمهيدي. وبالنسبة لأي شخص يصل إلى هنا ، يمكننا أيضًا الاستشهاد بالجزء ذي الصلة:

يعرض VS Code الآن مشكلات نمط التعليمات البرمجية TypeScript كتحذيرات بدلاً من الأخطاء. وهذا ينطبق على:

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

يمكنك تعطيل هذا السلوك عن طريق تعيين: "typescript.reportStyleChecksAsWarnings": false.

لذلك هذا حل مؤقت وسيعمل فقط عند استخدام VSCode. لن تقوم أي أداة بناء أخرى تستخدم tsc مباشرة بتجميع الكود إذا تركت التحذيرات هناك. لدي بعض الزملاء الذين يستخدمون Atom ، لذا لن يتمكنوا من تجميع الكود إذا أجريت تغييرات وتجاهلت أحد التحذيرات. حق؟

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

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

--- تعديل ---
لم أقرأ جميع التعليقات السابقة. pelotom كان

إذا كنت تريد أن يكون لعمليات فحص النسالة درجة خطورة مختلفة في وضع dev مقابل وضع CI ، فيمكنك القيام بذلك باستخدام تكوينات tslint.json المتعددة حيث يكون أحدهما extends الآخر. يجب إصلاح # 2569 لكي تكون UX هنا جيدة بحيث يمكنك تبديل الخطورة بخط تكوين واحد فقط defaultSeverity - إنه قيد التقدم.

adidahiya ما تتم مناقشته هو _replacement_ المزعومة لقاعدة lint no-unused-variable ، باستخدام tsc 's noUnusedLocals .

pelotom صحيح ، لقد فهمت ذلك - لكنني لا أعتقد أن tsc يدعم مثل هذا العمل حتى الآن. يمكن أن يكون لديك ملفان tsconfig.json حيث يمتد أحدهما الآخر ويعطل كل فحص مترجم "غير فادح" (في هذه الحالة ، noUnusedLocals ، noUnusedParameters ) بشكل فردي ، ولكن هذا لن لن ندعك ترى الشيكات كتحذيرات في المحرر الخاص بك.

adidahiya نعم ، لهذا السبب لا يعد بديلاً صالحًا حاليًا. وأنا أفضل كثيرًا أن أرى no-unused-variable مصنوعًا للعمل بشكل صحيح في VSCode بدلاً من استثمار المزيد من الجهد للحصول على noUnusedLocals ليتصرف مثل قاعدة النسالة. IMO لقد كان من الخطأ أن يحاول المترجم الحصول على ملكية هذا النوع من التحقق في المقام الأول.

وأنا أفضل أن أرى متغيرًا غير مستخدم يعمل بشكل صحيح في VSCode بدلاً من استثمار المزيد من الجهد لجعل noUnusedLocals يتصرف مثل قاعدة الوبر.

من المنطقي. أعتقد أن هذا المشروع يهدف إلى القيام بذلك: https://github.com/angelozerr/tslint-language-service. يمكنك استخدام القواعد التي تتطلب التحقق من النوع باستخدام هذا المكون الإضافي.

لقد تحدثت في وقت مبكر جدا. تم حظرنا على https://github.com/palantir/tslint/issues/2649 حتى يكون هذا المكون الإضافي مفيدًا. تتبع هذه المشكلة بدلاً من ذلك.

adidahiya نعم ، لقد كنت

أي أخبار عن هذا؟ هل سيتم إهماله أم لا؟

@ philip-firstorder باستخدام هذا حل المشكلة بالنسبة لي --project tsconfig.json

tslint -c tslint.json --project tsconfig.json src/**/*.ts

يتم الآن إهمال المتغير no-unused-variable ، راجع # 3918 و # 3919

🤖 بيب بوب! 👉 تم إهمال TSLint 👈 ويجب عليك التبديل إلى print-eslint ! 🤖

🔒 تم إقفال هذه المشكلة لمنع المزيد من المناقشات غير الضرورية. شكرا لك! 👋

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

القضايا ذات الصلة

adidahiya picture adidahiya  ·  37تعليقات

nrip-monotype picture nrip-monotype  ·  35تعليقات

zdychacek picture zdychacek  ·  33تعليقات

bertolo1988 picture bertolo1988  ·  20تعليقات

doronsever picture doronsever  ·  20تعليقات