2012-02-23 34 views
5

Tôi đang viết một số Mẫu tùy chỉnh Resarper để cảnh báo cho chúng tôi về một số cấu trúc mã cần chú ý. Một trong số đó được thay thế OnpropertyChanged ("String") với một biến lambda OnPropertyChanged (() => PROPERTYNAME)Chỉnh sửa mẫu tùy chỉnh: Bỏ qua thuộc tính thuộc tính

Các mô thức tìm kiếm tôi được định nghĩa là:

public $type$ $property$ 
{ 
      get { return $backingfield$; } 
      set 
      { 
       if($backingfield$ != value) { 
        $backingfield$ = value; 
        OnPropertyChanged($String$); 
       } 
      } 
} 

mô hình này đã được thay thế bằng:

public $type$ $property$ 
{ 
     get { return $backingfield$; } 
     set 
     { 
      if($backingfield$ != value) { 
       $backingfield$ = value; 
       OnPropertyChanged(() => $property$); 
      } 
     } 
} 

Sự cố: Khi áp dụng điều này, Resharper sẽ loại bỏ các thuộc tính được xác định trên thuộc tính. đoạn này:

[MyAttribute] 
public int Test 
{ 
      get { return _Test; } 
      set 
      { 
       if (_Test != value) 
       { 
        _Test = value; 
        OnPropertyChanged("Test"); 
       } 
      } 
} 

được thay thế bằng

public int Test 
{ 
      get { return _Test; } 
      set 
      { 
       if (_Test != value) 
       { 
        _Test = value; 
        OnPropertyChanged(() => Test); 
       } 
      } 
} 

Làm thế nào tôi có thể giữ các thuộc tính ??

CẬP NHẬT: Thêm trình giữ chỗ kiểu bắt nguồn từ System.Attribute cho cả tìm kiếm và thay thế sửa một phần.

[$Attributes$] 
... 

Còn lại vấn đề là các thuộc tính placeholder chỉ phù hợp với một thuộc tính, nó không thành công trên nhiều thuộc tính.

+0

Bạn có thực sự cần tìm kiếm toàn bộ tài sản không? Có lẽ bạn chỉ có thể tìm kiếm 'OnPropertyChanged ($ String $);' và thay thế nó bằng 'OnPropertyChanged (() => $ String $);'. – brgerner

+1

Khi thực hiện việc này, OnpropertyChanges ("test") được thay thế bằng OnPropertyChanged (() => "test"). Trình giữ chỗ thử nghiệm được định nghĩa là biểu thức của chuỗi loại. – Yoeri

+0

Bạn nói đúng. Đó là sai lầm của tôi. – brgerner

Trả lời

2

Nếu bạn không thể nhận được giải pháp khác, có một giải pháp thay thế.
Bạn sử dụng mẫu Tìm kiếm của mình (không sử dụng mẫu thay thế) để hiển thị cảnh báo. Tôi nghĩ rằng các công trình đã có.
Sau đó, bạn tạo một Mẫu bao quanh thay thế một chuỗi thành () => PropName. Xem hình ảnh cho một ví dụ:

enter image description here

Sau đó, bạn có những lời cảnh báo bằng mô hình tìm kiếm và các thay thế bởi một Template Surround.
Cách sử dụng là: Nếu bạn thấy cảnh báo chọn chuỗi, nhấn Ctrl + E, Ctrl + U và chọn mẫu Chuỗi để trả về thuộc tính func.

Tất nhiên, việc chọn chuỗi đang gây phiền toái. Nhưng đó là điều tốt nhất mà tôi đã tìm ra cho đến bây giờ.

+0

+1 Cảm ơn, tôi sẽ chấp nhận nó khi kết quả từ diễn đàn cộng đồng jetbrains là tiêu cực :-) – Yoeri

+0

Tôi đã gửi một sự cố sau khi nhận được câu trả lời @ diễn đàn cộng đồng jetbrains: Xin chào Yoeri Tôi không thể được bảo quản trong trường hợp này. Bạn có thể yêu cầu thông qua trình theo dõi lỗi của chúng tôi: http://youtrack.jetbrains.net/issues/RSRP. Cảm ơn bạn! Andrey Serebryansky Kỹ sư hỗ trợ cấp cao JetBrains, Inc – Yoeri

0

Đối với các tác vụ như vậy, tôi đã sử dụng cụm từ thông dụng. VS hỗ trợ thay thế bằng các biểu thức thông thường, nhưng đôi khi chúng treo hoặc chỉ hoạt động rất chậm. Tuy nhiên, trong hầu hết các trường hợp, chúng hoạt động.

Điều đó có giúp ích cho bạn không?

Cập nhật. Bạn không cần phải có tất cả tài sản trong nhóm thay thế, như brgerner gợi ý, bạn chỉ cần chỉ có một chuỗi được chuyển đổi. Ví dụ: cụm từ thông dụng tìm kiếm sẽ là OnPropertyChanged\("{:w*}"\); và chuỗi thay thế sẽ là OnPropertyChanged(() => \1);

Không chắc chắn bạn có thể thực hiện điều đó trong Resharper thay thế mẫu hay không.

+1

Chúng tôi không có ý định thay thế tất cả. Chúng tôi đang sử dụng cài đặt chia sẻ lại chia sẻ và yêu cầu từ nhà phát triển để sửa lỗi cảnh báo anbd trước khi đăng ký. Chúng tôi dần dần thêm mục mới để Resharper để cải thiện tính nhất quán trong mã. Thay thế tất cả là tốt như một hành động một lần, kiểm tra resharper cũng làm nổi bật khi thêm mã mới. – Yoeri

+0

Không biết rằng các mẫu resharper đang tạo ra cảnh báo. Bất kỳ cách nào có vẻ như resharper không thể sử dụng regex cho những thứ như vậy - có thể bạn cần phải tìm hoặc viết một plugin cho nó. Hoặc có thể bạn nên cân nhắc sử dụng StyleCop +. Nó có thể dễ dàng mở rộng với các plugin viết tay, có thể cảnh báo những thứ như vậy – Archeg

+0

Đúng, với phân tích mã được kích hoạt trong chia sẻ lại, bạn có thể trigget một cảnh báo, lỗi, gợi ý hoặc gợi ý. Chúng dẫn đến mã được gạch chân và thu hút sự chú ý từ nhà phát triển. Chúng tôi luôn có ý định tập tin kiểm tra te không có cảnh báo resharper cũng không lỗi. – Yoeri

Các vấn đề liên quan