2011-01-31 8 views
8

Mã của tôi chứa biến có tên "m_d3dDevice".Cách khắc phục vi phạm StyleCop SA1305 (tiếng Hungari)

StyleCop phàn nàn về cái tên này:

SA1305: Tên biến 'm_d3dDevice' bắt đầu với một tiền tố trông giống như ký hiệu Hungary. Xóa tiền tố hoặc thêm tiền tố vào danh sách các tiền tố được phép.

(Lưu ý Tôi có tay tàn tật SA1308 ("m_"), một trong số ít các quy tắc tôi sẵn sàng vâng lời.)

tôi không thể cho phép "D3D" như là một ngoại lệ trong Hungary , vì nó chỉ cho phép 1 hoặc 2 tiền tố char và cho phép "d3" không giúp được gì. Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến để thêm "d3d" vào tập tin CustomDictionary của tôi (và dù sao các tài liệu ngụ ý CustomDict không được sử dụng cho quy tắc 1305).

Bất kỳ đề xuất nào để làm cho StyleCop cho phép điều này? Đó là một vấn đề của niềm tự hào bây giờ để không phải F2 biến của tôi.

+0

'D3D là gì 'viết tắt của? –

+0

Tôi nghĩ rằng cách duy nhất để đáp ứng quy tắc này là đổi tên biến của bạn thành một biến như 'm_direct3DDevice' nếu đó là từ viết tắt của. –

+4

Thật là một "quy tắc" vô lý và một bài kiểm tra châm biếm thậm chí còn vô lý hơn để xác định các vi phạm. Có gì sai khi chỉ vô hiệu hóa quy tắc đó và tin tưởng bản thân bạn đủ thông minh để đặt tên biến? Quy tắc chăn để * tránh * Ký hiệu "Hungary" dường như trở nên vô lý như quy tắc mà người ta nên sử dụng nó. –

Trả lời

6

Bạn có thể xem StyleCop+. Nó chứa các quy tắc đặt tên linh hoạt cho phép bạn buộc tất cả các trường riêng được đặt tên bắt đầu bằng "m_" (hoặc bất kỳ điều gì bạn muốn) thay vì tắt kiểm tra tên (như bạn đã làm).

Về "d3dDevice" - đó là một trường hợp rất thú vị. Về mặt logic, nó chia tách các từ sau - {"d", "3", "d", "Thiết bị"} hoặc {"d3", "d", "Thiết bị"}. Và chữ "d" thứ hai có vẻ không theo "camelNotation".

Nhưng tôi tin tưởng rằng phân tích tĩnh (đặc biệt là đặt tên) phải đủ linh hoạt để đáp ứng nhu cầu của người dùng. Hiện tại StyleCop + có thể hỗ trợ trường hợp của bạn theo cách sau - ví dụ: bạn có thể thêm "ngoại lệ" (bao nhiêu tùy thích) để đặt tên mẫu cho trường riêng tư, sao cho mẫu sẽ giống như sau:

m _ $ (AABB)
m_d3d $ (AABB)

Đây là nhiều khả năng được khắc phục, nhưng tôi sẽ suy nghĩ về "D3D" trường hợp của bạn - và có lẽ StyleCop + sẽ hỗ trợ một cái gì đó như thế này.

Cảm ơn bạn về ví dụ thú vị!

+2

Một bài đăng rất hữu ích, do đó, +1 từ tôi. Nhưng như một lời cảnh báo công bằng, vì có vẻ như bạn vừa mới vừa là Stack Overflow và là tác giả của hoặc liên kết chặt chẽ với StyleCop +. Bạn có thể muốn làm cho liên kết của bạn rõ ràng (nói bằng cách bao gồm tuyên bố từ chối trách nhiệm đơn giản), để người dùng không quyết định gắn cờ bài đăng của bạn là spam. Phần dưới cùng của [FAQ] (http://stackoverflow.com/faq) cũng thảo luận về điều này một cách ngắn gọn. Nhưng bất kể, chào mừng bạn đến với trang web và cảm ơn bạn đã chia sẻ kiến ​​thức chuyên môn của mình! –

+1

Tôi sẽ xem StyleCop +, cảm ơn. Mặc dù, dường như không có câu trả lời "thực" cho trường hợp này, ngoài việc đổi tên biến hoặc vô hiệu quy tắc, tôi sẽ đánh dấu đây là câu trả lời hay nhất ... -mpg – mpg

+0

@Cody Có, bạn nói đúng - Tôi là tác giả. Cảm ơn bạn đã cảnh báo, tôi chắc chắn không có ý định quảng bá nó. Tôi sẽ cẩn thận về điều đó. –

11

Bạn cũng có thể chặn kiểu dáng trên cơ sở từng trường hợp. ví dụ.

[System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.StyleCop.CSharp.NamingRules", 
    "SA1305:FieldNamesMustNotUseHungarianNotation", 
    Justification = "Using Win32 naming for consistency.")] 
IntPtr hFile; 

Đây có thể không phải là một tùy chọn hấp dẫn nếu bạn có nhiều tên vi phạm, nhưng đối với một hoặc hai tên, thường thì tốt.

0

Việc thêm thuộc tính đàn áp phải được thực hiện trên tất cả các phương pháp sẽ mất thời gian và quá trình lâu dài.

Nếu bạn muốn loại bỏ quy tắc này từ dự án của bạn thử

  • Nhấp chuột phải trên dự án của bạn
  • Chọn StyleCop Cài đặt
  • Tìm SA1305
  • Bỏ chọn sự cai trị từ kết quả thiết
  • Bấm Áp dụng - OK
  • Chạy lại quy tắc cảnh sát kiểu.
1

Bạn cũng có thể sử dụng Settings.StyleCop trong các tệp gói để định cấu hình cài đặt.

Bạn có thể ngăn chặn những từ cụ thể bằng cách thêm mã dưới đây vào Settings.StyleCop file:

<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules"> 
    <AnalyzerSettings> 
    <CollectionProperty Name="Hungarian"> 
     <Value>as</Value> 
     <Value>do</Value> 
     <Value>id</Value> 
     <Value>if</Value> 
     <Value>in</Value> 
     <Value>ip</Value> 
     <Value>is</Value> 
     <Value>mx</Value> 
     <Value>my</Value> 
     <Value>no</Value> 
     <Value>on</Value> 
     <Value>to</Value> 
     <Value>ui</Value> 
     <Value>vs</Value> 
     <Value>x</Value> 
     <Value>y</Value> 
     <Value>z</Value> 
     <Value>iOS</Value> 
     <Value>IOS</Value> 
    </CollectionProperty> 
    </AnalyzerSettings> 
</Analyzer> 

Bạn có thể ngăn chặn các Hungarain Rule riêng của mình bằng cách thêm vào sau vào Settings.StyleCop tập tin

<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules"> 
    <Rules> 
    <Rule Name="FieldNamesMustNotUseHungarianNotation"> 
    <RuleSettings> 
    <BooleanProperty Name="Enabled"> 
     False 
    </BooleanProperty> 
    </RuleSettings> 
    </Rule> 
</Rules> 
</Analyzer>