2013-03-13 5 views
3

나는 고토으로 가득 차있는 이전에 생성 된 C# 코드를 번역하고 있습니다. 제발 그 말을 해달라, 나는 그 끔찍한 것을 안다. 어쨌든, goto-statements를 더 읽기 쉽게 만드는 방법/확장 기능은 무엇입니까? 그 코드가 점프하는 장소를 찾는 고통. 나는 그것이 내 방향을 잃어 버리게하기 때문에 검색 기능을 사용하고 싶지 않다.Visual Studio 2010에서 강조 표시

나는이 모든 것을 발견했습니다 : http://visualstudiogallery.msdn.microsoft.com/4b286b9c-4dd5-416b-b143-e31d36dc622b 그것은 작동하지 않습니다.

아무 것도 추천 할 수 있습니까?

+0

나쁜 가독성 우리가 goto''사용하여 피할 이유는 정확히 이유 아닙니까? – Carsten

+0

글쎄, 내 생각 엔 도구 -> 옵션 -> 텍스트 편집기 -> C# -> 서식 -> 들여 쓰기 -> 레이블 들여 쓰기 -> 모든 레이블을 빠르게 만들 수있는 가장 왼쪽 열에 레이블을 배치하십시오. 주목할 만하다. – Agent007

+1

언급 한 확장 기능은 GOTO 문을 찾는 것이 아니라 코드 내의 탐색 사이에 사용됩니다. –

답변

2

당신은 DevExpress CodeRush을 고려할 수 있습니다. goto 문에는 goto arrow과 같은 화살표가 표시됩니다. 화살표 위로 마우스를 가져 가면 레이블 뒤에있는 문이 강조 표시되고 (이미 표시된 경우) 레이블을 클릭하면 레이블이 표시되고 해당 문으로 커서가 이동합니다.

0

"Ctrl"+ "-"를 사용하면 코드의 마지막 위치로 돌아갈 수 있습니다. 이것은 아마도 매우 분명하지만 CSharpie가이 바로 가기 키를 인식하지 못하는 것처럼 보였습니다.

+0

고마워. 고마워. 주된 이유는 코드가하는 일을 파악하기가 너무 어렵 기 때문입니다. 출발점으로 뛰어 오르는 것은 도움이되지만 중첩 된 것들에서 무슨 일이 일어나는지 알아 내기 위해 도움이되지 않습니다. – CSharpie

2

다소 늦었 겠지만 Visual Studio Extensibility를 사용하여 직접 빌드 할 수 있습니다. 따라서 사용자 지정 동작도 추가 할 수 있습니다. Inside the Editor: Tags and Classifier. 단계는 다음과 같습니다

1) 에디터 분류 프로젝트 (내장 프로젝트 형식)

2) 삭제를 기존의 클래스 파일

3

) 아래의 코드를 추가를 만듭니다. 그것은 빨간색 코드 부분의 모든 '고토'문을 색상 화됩니다

goto colorizer

internal class GotoTagger : ITagger<GotoTag> 
{ 
    private ITextSearchService _textSearchService; 
    private ITextStructureNavigator _textStructureNavigator; 

    event EventHandler<SnapshotSpanEventArgs> ITagger<GotoTag>.TagsChanged { add { } remove { } } 

    public GotoTagger(ITextSearchService textSearchService, ITextStructureNavigator textStructureNavigator) 
    { 
     _textSearchService = textSearchService; 
     _textStructureNavigator = textStructureNavigator; 
    } 

    public IEnumerable<ITagSpan<GotoTag>> GetTags(NormalizedSnapshotSpanCollection spans) 
    { 
     if (spans.Count == 0) 
      yield break; 

     if (spans.Count > 0) 
     { 
      // look for 'goto' occurrences 
      foreach (SnapshotSpan span in _textSearchService.FindAll(new FindData("goto", spans[0].Snapshot, FindOptions.WholeWord | FindOptions.MatchCase, _textStructureNavigator))) 
      { 
       yield return new TagSpan<GotoTag>(span, new GotoTag()); 
      } 
     } 
    } 
} 


    [Export(typeof(IViewTaggerProvider))] 
    [TagType(typeof(TextMarkerTag))] 
    [ContentType("code")] // only for code portion. Could be changed to csharp to colorize only C# code for example 
    internal class GotoTaggerProvider : IViewTaggerProvider 
    { 
     [Import] 
     internal ITextSearchService TextSearchService { get; set; } 

     [Import] 
     internal ITextStructureNavigatorSelectorService TextStructureNavigatorSelector { get; set; } 

     public ITagger<T> CreateTagger<T>(ITextView textView, ITextBuffer buffer) where T : ITag 
     { 
      if (textView.TextBuffer != buffer) 
       return null; 

      return new GotoTagger(TextSearchService, TextStructureNavigatorSelector.GetTextStructureNavigator(buffer)) as ITagger<T>; 
     } 
    } 

    internal class GotoTag : TextMarkerTag 
    { 
     public GotoTag() : base("goto") { } 
    } 

    [Export(typeof(EditorFormatDefinition))] 
    [Name("goto")] 
    [UserVisible(true)] 
    internal class GotoFormatDefinition : MarkerFormatDefinition 
    { 
     public GotoFormatDefinition() 
     { 
      BackgroundColor = Colors.Red; 
      ForegroundColor = Colors.White; 
      DisplayName = "Goto Word"; 
      ZOrder = 5; 
     } 
    } 
+0

이동 경로에 대한 정보가 더 있습니다. 아직도 몇 가지 아이디어가 있기 때문에 코드를 잘 보관하십시오. – CSharpie

관련 문제