2016-02-23 1 views
6

私は、フラグメントを実行するためにLinqPadを使ってRoslynのコード生成機能を試しています。 LinqPadの.Dump()拡張メソッドは、オブジェクトのフォーマットされたビューを結果ペインにレンダリングします。Roslynの ".WithFooToken()"は不要ですか?

http://roslynquoter.azurewebsites.net/によって生成されたコードには、膨れを追加する以外の多くの機能を備えていないようなコードが多数含まれています。次のコードは、.WithFooToken(...)呼び出しがコメントアウトされているかどうかを出力するreturn null;を出力します。

using Microsoft.CodeAnalysis; 
using Microsoft.CodeAnalysis.CSharp; 
using Microsoft.CodeAnalysis.CSharp.Syntax; 

var syn = 
    SyntaxFactory.ReturnStatement(
     SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression) 
//   .WithToken(SyntaxFactory.Token(SyntaxKind.NullKeyword)) 
    ) 
// .WithReturnKeyword(
//  SyntaxFactory.Token(SyntaxKind.ReturnKeyword) 
// ) 
// .WithSemicolonToken(
//  SyntaxFactory.Token(SyntaxKind.SemicolonToken) 
// ) 
; 
syn.NormalizeWhitespace().ToFullString().Dump(); 

このような呼び出しは、すべての言語でオプションか、Roslynサポートライブラリに組み込まれた適切なデフォルトを持つ言語に対してのみ有効ですか?

+0

これらの呼び出しは、 'return/**/null;'のような場合には有効です。それらが常に含まれている理由については、何らかの理由で2つのケースを区別するのが難しいかもしれません。 – svick

+0

コードが部分的にしか構成されていない場合があります。デフォルトでは、 'return'キーワードを仮定してセミコロンがあるので、デフォルトで追加しますが、セミコロンがまだ入力されていない場合はどうなりますか? 'syntax = syntax.WithSemicolonToken(SyntaxFactory.MissingToken(SyntaxKind.SemicolonToken));' –

答えて

5

はい、単純なケースでは、これらの呼び出しは必要ありません。 The code of RoslynQuoterにはRemoveRedundantModifyingCallsオプションがあります。これはあなたが望むものを正確に行うと考えられています。しかし、the only usageがコメントアウトされ、実装されていない:svickの答え@

private void AddModifyingCall(ApiCall apiCall, MethodCall methodCall) 
{ 
    // TODO: this needs scripting 
    ////if (RemoveRedundantModifyingCalls) 
    ////{ 
    //// var before = Evaluate(apiCall, UseDefaultFormatting); 
    //// apiCall.Add(methodCall); 
    //// var after = Evaluate(apiCall, UseDefaultFormatting); 
    //// if (before == after) 
    //// { 
    ////  apiCall.Remove(methodCall); 
    //// } 
    ////} 

    apiCall.Add(methodCall); 
    return; 
} 
7

は正しいです。 Roslyn Scriptingが利用できなかったので、そのコードを再度有効にするのを忘れてしまった。

今でスクリプトが公開されて、私はそのコードを再度有効にしてウェブサイトを更新しました: http://roslynquoter.azurewebsites.net/

あなたがなくなってしなければならない上記の言及のように(今のウェブサイト、および冗長通話を試してみてください彼らはまだよトリビア/コメント/などを変更する必要があるときに表示されます)。

関連する問題