একটি নির্দিষ্ট লাইন কোডের জন্য কীভাবে একটি নির্দিষ্ট চেকস্টাইল নিয়ম অক্ষম করবেন?


183

আমার প্রোজেক্টে আমার একটি চেকস্টাইল বৈধকরণের নিয়ম কনফিগার করা আছে, যা 3 টিরও বেশি ইনপুট পরামিতি সহ শ্রেণি পদ্ধতিগুলি সংজ্ঞায়িত করতে নিষেধ করে। বিধিটি আমার ক্লাসগুলির জন্য দুর্দান্ত কাজ করে তবে কখনও কখনও আমাকে তৃতীয় পক্ষের ক্লাসগুলি বাড়িয়ে দিতে হয়, যা এই বিশেষ নিয়মটি মানায় না।

"চেকস্টাইল" নির্দেশ দেওয়ার কোনও সম্ভাবনা আছে যে একটি নির্দিষ্ট পদ্ধতিটি চুপচাপ উপেক্ষা করা উচিত?

বিটিডাব্লু, আমি আমার নিজের চেকস্টাইলের মোড়ক দিয়ে শেষ করেছি: qulice.com ( জাভা কোড মানের কঠোর নিয়ন্ত্রণ দেখুন )

উত্তর:


290

Http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilterসুপারশনকমেন্টমেন্ট ফিল্টার ব্যবহার করে দেখুন । আপনাকে আপনার চেকস্টাইল.এক্সএমএলে মডিউল যুক্ত করতে হবে

<module name="SuppressionCommentFilter"/>

এবং এটি কনফিগারযোগ্য সুতরাং আপনি চেকস্টাইল বন্ধ করতে আপনার কোডটিতে মন্তব্যগুলি যুক্ত করতে পারেন (বিভিন্ন স্তরে) এবং তারপরে আপনার কোডটিতে মন্তব্য ব্যবহারের মাধ্যমে আবার ফিরে যেতে পারেন। যেমন

//CHECKSTYLE:OFF
public void someMethod(String arg1, String arg2, String arg3, String arg4) {
//CHECKSTYLE:ON

বা আরও ভাল, এই আরও টুইট সংস্করণ ব্যবহার করুন:

<module name="SuppressionCommentFilter">
    <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
    <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
    <property name="checkFormat" value="$1"/>
</module>

যা আপনাকে কোডের নির্দিষ্ট লাইনের জন্য নির্দিষ্ট চেক বন্ধ করতে দেয়:

//CHECKSTYLE.OFF: IllegalCatch - Much more readable than catching 7 exceptions
catch (Exception e)
//CHECKSTYLE.ON: IllegalCatch

* দ্রষ্টব্য: আপনাকে আরও যুক্ত করতে হবে FileContentsHolder:

<module name="FileContentsHolder"/>

আরো দেখুন

<module name="SuppressionFilter">
    <property name="file" value="docs/suppressions.xml"/>
</module>

SuppressionFilterএকই পৃষ্ঠায় বিভাগের অধীনে , যা আপনাকে প্যাটার্নের সাথে মিলিত সংস্থানগুলির জন্য পৃথক চেক বন্ধ করতে দেয়।

সুতরাং, যদি আপনার চেকস্টাইল.এক্সএমএল থাকে:

<module name="ParameterNumber">
   <property name="id" value="maxParameterNumber"/>
   <property name="max" value="3"/>
   <property name="tokens" value="METHOD_DEF"/>
</module>

আপনি এটি দিয়ে আপনার দমন এক্সএমএল ফাইলটিতে এটি বন্ধ করতে পারেন:

<suppress id="maxParameterNumber" files="YourCode.java"/>

এখন চেকস্টাইল 7. Another এ উপলব্ধ অন্য একটি পদ্ধতি হল @SuppressWarningsজাভা টীকাটির মাধ্যমে লঙ্ঘন দমন করা । এটি করার জন্য আপনার কনফিগারেশন ফাইলে দুটি নতুন মডিউল ( SuppressWarningsFilterএবং SuppressWarningsHolder) যুক্ত করতে হবে:

<module name="Checker">
   ...
   <module name="SuppressWarningsFilter" />
   <module name="TreeWalker">
       ...
       <module name="SuppressWarningsHolder" />
   </module>
</module> 

তারপরে, আপনার কোডের মধ্যে আপনি নিম্নলিখিতগুলি করতে পারেন:

@SuppressWarnings("checkstyle:methodlength")
public void someLongMethod() throws Exception {

বা, একাধিক দমন জন্য:

@SuppressWarnings({"checkstyle:executablestatementcount", "checkstyle:methodlength"})
public void someLongMethod() throws Exception {

এনবি: " checkstyle:" উপসর্গটি alচ্ছিক (তবে প্রস্তাবিত)। দস্তাবেজ অনুসারে প্যারামিটারের নামটি সমস্ত ছোট হাতের অক্ষরে থাকতে হবে, তবে অনুশীলনটি কোনও ক্ষেত্রে কাজ করার ইঙ্গিত দেয়।


7
ট্রিওয়াল্টারে ফাইলকন্টেন্টসহোল্ডার যুক্ত মনে রাখবেন। দেখুন stackoverflow.com/a/5764666/480483
djjeck

2
যদি আপনি এটি ব্যবহার করেন //CHECKSTYLE.OFF: এবং তারপরে এটি আবার চালু করতে ভুলে যান, তবে এটি কি কেবলমাত্র //CHECKSTYLE.OFF: ফাইলগুলিতে বা পরবর্তীকালে সমস্ত প্রক্রিয়াজাত ফাইলগুলিতেই পরীক্ষা করা থেকে যায়?
রোল্যান্ড

1
@ রোল্যান্ড, এটি কেবলমাত্র সেই পরীক্ষার শ্রেণির সময়কালের জন্য বন্ধ রয়েছে।
ক্রিস নাইট

1
"প্যারামিটারের নামটি সমস্ত ছোট হাতের অক্ষরে থাকতে হবে।" @SuppressWarnings("checkstyle:VariableDeclarationUsageDistance")লোয়ার-কেস সমতুল্য হিসাবে ঠিক আমার পক্ষেও কাজ করেছে worked
অ্যান্ডারস রাবো থর্বেক

2
যেহেতু checkstyle 8.1 SuppressionCommentFilter অধীনে হওয়া উচিত TreeWalker, এবং FileContentHolderআর প্রয়োজনীয় (উপলব্ধ) নয়।
এভেন্ডারসন

69

আপনি যদি চূড়ান্তভাবে নিয়ম নীরব করতে টীকাগুলি ব্যবহার করতে পছন্দ করেন তবে এখন @SuppressWarningsচেকস্টাইল 5.7 (এবং চেকস্টাইল মাভেন প্লাগইন 2.12+ দ্বারা সমর্থিত) দিয়ে টীকাটি ব্যবহার করে এটি সম্ভব ।

প্রথমে আপনার checkstyle.xmlমধ্যে SuppressWarningsHolderমডিউলটি এতে যুক্ত করুন TreeWalker:

<module name="TreeWalker">
    <!-- Make the @SuppressWarnings annotations available to Checkstyle -->
    <module name="SuppressWarningsHolder" />
</module>

এরপরে, SuppressWarningsFilterসেখানে সক্ষম করুন (এতে সহোদর হিসাবে TreeWalker):

<!-- Filter out Checkstyle warnings that have been suppressed with the @SuppressWarnings annotation -->
<module name="SuppressWarningsFilter" />

<module name="TreeWalker">
...

এখন আপনি এনটেট করতে পারেন উদাহরণস্বরূপ যে পদ্ধতিটি আপনি একটি নির্দিষ্ট চেকস্টাইল বিধি থেকে বাদ দিতে চান:

@SuppressWarnings("checkstyle:methodlength")
@Override
public boolean equals(Object obj) {
    // very long auto-generated equals() method
}

checkstyle:থেকে যুক্তি উপসর্গ @SuppressWarningsএকটি অনুস্মারক যেখানে এই সতর্কবার্তা থেকে এসেছিলেন যেমন মত ঐচ্ছিক, কিন্তু আমি। নিয়মের নাম অবশ্যই ছোট হাতের হতে হবে।

সবশেষে, আপনি যদি একটিলপিস ব্যবহার করছেন তবে এটি যুক্তিটির অজানা সম্পর্কে অভিযোগ করবে:

অসমর্থিত @ সাপ্রেস ওয়ার্নিংস ("চেকস্টাইল: পদ্ধতিবদ্ধতা")

আপনি যদি পছন্দ করেন তবে এই Eclipse সতর্কতাটি পছন্দগুলিতে অক্ষম করতে পারেন:

Preferences:
  Java
  --> Compiler
  --> Errors/Warnings
  --> Annotations
  --> Unhandled token in '@SuppressWarnings': set to 'Ignore'

2
আমি এটিকে পরীক্ষিত উত্তর হিসাবে মনোনীত করি, কারণ আমার ধারণা এটি বেশিরভাগ ক্ষেত্রে সবচেয়ে ভাল কাজ করা উচিত এমন সমাধান।
এভেন্ডারসন

33

যা ভালভাবে কাজ করে তা হ'ল সাপ্রেস উইথ নয়ারবিকমেন্ট ফিল্টার যা নিরীক্ষণের ইভেন্টগুলিকে দমন করতে স্বতন্ত্র মন্তব্য ব্যবহার করে।

উদাহরণ স্বরূপ

// CHECKSTYLE IGNORE check FOR NEXT 1 LINES
public void onClick(View view) { ... }

ফিল্টারটি কনফিগার করতে যাতে নেক্সট ভার লাইনগুলির জন্য চেকস্টাইল ইগনোর চেক বর্তমান লাইন এবং পরবর্তী ভেরি লাইনের জন্য প্রদত্ত চেকের জন্য কোনও অডিট ট্রিগার করা এড়াতে পারে (মোট ভার্চ + 1 লাইনের জন্য):

<module name="SuppressWithNearbyCommentFilter">
    <property name="commentFormat" value="CHECKSTYLE IGNORE (\w+) FOR NEXT (\d+) LINES"/>
    <property name="checkFormat" value="$1"/>
    <property name="influenceFormat" value="$2"/>
</module>

http://checkstyle.sourceforge.net/config.html


আমি রেজিজকে পরিবর্তন CHECKSTYLE IGNORE (\w+) FOR NEXT (\d+) LINES?করব যা উপেক্ষা করার আদেশটি আরও পঠনযোগ্য করে তুলবে। (আপনি "পরবর্তী 1 লাইনের জন্য চেকস্টাইল ইগনোর চেক" এবং "পরবর্তী 3 লাইনগুলির জন্য চেকস্টাইল ইগনোর চেক" ব্যবহার করতে সক্ষম হবেন)।
Matt3o12

@ matt3o12 CHECKSTYLE IGNORE (\w+) FOR NEXT (\d+) LINEএছাড়াও আমার জন্য কাজ করে (এটা উভয় মিলে যায় lineএবং lines)।
স্লাভা সেমুশিন

3

প্রতিটি উত্তর উল্লেখ করা SuppressWarningsFilter একটি গুরুত্বপূর্ণ বিস্তারিত অনুপস্থিত। আপনি যদি কেবলমাত্র এটির চেকস্টাইল-কনফিগারেশন.এক্সএমএল হিসাবে সংজ্ঞায়িত করা হয় তবে আপনি কেবল সর্ব-ছোট হাতের আইডি ব্যবহার করতে পারেন। যদি না হয় তবে আপনাকে অবশ্যই মূল মডিউলটির নামটি ব্যবহার করতে হবে।

উদাহরণস্বরূপ, যদি আমার চেকস্টাইল-কনফিগ.এক্সএমএল থাকে:

<module name="NoWhitespaceBefore"/>

আমি ব্যবহার করতে পারি না:

@SuppressWarnings({"nowhitespacebefore"})

আমি অবশ্যই ব্যবহার করতে হবে:

@SuppressWarnings({"NoWhitespaceBefore"})

প্রথম সিনট্যাক্সটি কাজ করার জন্য, চেকস্টাইল-কনফিগ.এক্সএমএল থাকা উচিত:

<module name="NoWhitespaceBefore">
  <property name="id" value="nowhitespacebefore"/>
</module>

এটি আমার পক্ষে অন্তত চেকস্টাইল সংস্করণ 6.17 সংস্করণে কাজ করেছে।


1

উপরের উত্তরগুলি নিয়ে আমার অসুবিধা হয়েছিল, সম্ভবত আমি চেকস্টাইল সতর্কতাটিকে ত্রুটি হিসাবে সেট করেছি। কাজটি কী ছিল সপ্রেশনফিলার: http://checkstyle.sourceforge.net/config_filters.html#SuppressionFilter

এর অপূর্ণতা হ'ল লাইন পরিসরটি একটি পৃথক suppresssion.xML ফাইলে সংরক্ষণ করা হয়, তাই অচেনা বিকাশকারী সাথে সাথে সংযোগটি নাও করতে পারে not


আপনাকে ধন্যবাদ, এটিই ছিল আমার পক্ষে কাজ করা একমাত্র জিনিস
জোনাথানর্জ

1
<module name="Checker">
    <module name="SuppressionCommentFilter"/>
    <module name="TreeWalker">
        <module name="FileContentsHolder"/>
    </module>
</module>

শুরু জেনারেটেড কোড এবং লাইন এন্ড জেনারেটেড কোড সহ একটি মন্তব্যের মধ্যে অডিট ইভেন্টগুলিকে দমন করার জন্য একটি ফিল্টার কনফিগার করতে:

<module name="SuppressionCommentFilter">
  <property name="offCommentFormat" value="BEGIN GENERATED CODE"/>
  <property name="onCommentFormat" value="END GENERATED CODE"/>
</module>

//BEGIN GENERATED CODE
@Override
public boolean equals(Object obj) { ... } // No violation events will be reported

@Override
public int hashCode() { ... } // No violation events will be reported
//END GENERATED CODE

আরো দেখুন


0

আপনি https://checkstyle.sourceforge.io/config_filters.html#SuppressionXpathFilter ব্যবহার করে দেখতে পারেন

-G বিকল্পের সাহায্যে সিএলআই ব্যবহার করে এক্সপাথ দমন উত্পন্ন করুন। তারপরে, আপনি যে লাইনে দমন করতে চান তার জন্য দমন উপাদানটি নির্দিষ্ট করুন। এটি একটি দমন ফাইলগুলিতে সংরক্ষণ করুন এবং উপরের সাপশনএক্সপথফিল্টার উপাদানটিতে সেই ফাইলের পাথটি নির্দিষ্ট করুন।

https://checkstyle.sourceforge.io/cmdline.html#Command_line_usage

আপনি যদি পিঁপড়া ব্যবহার করছেন তবে এক্সপথ ফাইল তৈরি করার জন্য আপনি এই পোস্টটিকে পিঁপড়ে টাস্ক হিসাবে উল্লেখ করতে পারেন।

https://github.com/checkstyle/checkstyle/issues/6934#issuecomment-522289083

ফিল্টারটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে এই থ্রেডটি পরীক্ষা করে দেখুন:

https://groups.google.com/forum/m/#!topic/checkstyle/F_f6R_Qk1EM

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.