3

私は現在、gotoでいっぱいの古い生成された C# コードを翻訳しています。それについてコメントしないでください、私はそれが恐ろしいことを知っています。とにかく、gotoステートメントをより読みやすくする方法/拡張/何でもありますか? コードがジャンプする場所を見つけるのは面倒です。検索機能は方向性を失うので使いたくありません。

私が見つけたのはこれ だけ です。

何かお勧めできますか?

4

4 に答える 4

3

少し遅れるかもしれませんが、Visual Studio Extensibility を使用して独自のビルドを作成できます (したがって、カスタム動作も追加できます):エディター内: タグと分類子。手順は次のとおりです。

1) Editor Classifier プロジェクト (組み込みプロジェクト タイプ) を作成します。

2) 既存のクラス ファイルを削除します。

3) 以下のコードを追加します。コード部分のすべての「goto」ステートメントを赤で色付けします。

カラライザーに移動

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;
        }
    }
于 2013-03-15T11:24:03.853 に答える
2

DevExpress CodeRushを検討できます。gotoステートメントは次のような矢印を取得します: 矢印に移動. 矢印の上にカーソルを置くと、ラベルに続くステートメントが強調表示され (既に表示されている場合)、クリックすると表示され、カーソルがそのステートメントに移動します。

于 2013-03-15T09:59:32.380 に答える
1

ReSharper のNavigate to function exits を試してください。

または Coderush のフロー ブレーク アイコン

于 2013-03-15T09:56:54.580 に答える
0

また、「Ctrl」+「-」を使用して、コードの最後の場所にジャンプして戻ることができることに注意してください。これはおそらく非常に明白ですが、CSharpie はこのホットキーを認識していないように思えました。

于 2013-03-15T10:51:43.447 に答える