2016-02-23 4 views
6

मैं टुकड़े चलाने के लिए लिंककैड का उपयोग कर रोज़लिन की कोड-जनरेशन क्षमताओं को आजमा रहा हूं। लिंककैड की डंप() एक्सटेंशन विधि ऑब्जेक्ट के स्वरूपित दृश्य को परिणाम फलक में प्रस्तुत करती है।क्या रोज़लिन का "विथफू टोकन()" अनावश्यक कहता है?

http://roslynquoter.azurewebsites.net/ द्वारा उत्पन्न कोड में बहुत सारे कोड शामिल हैं जो ब्लोट जोड़ने के अलावा अन्य कुछ नहीं करते हैं। निम्न कोड return null; आउटपुट करता है चाहे .WithFooToken(...) कॉल पर टिप्पणी की गई हो या नहीं।

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

उन कॉल 'वापसी/**/शून्य' जैसे मामलों में निश्चित रूप से उपयोगी हैं। क्यों वे हमेशा शामिल होते हैं, शायद कुछ कारणों से यह दो मामलों को अलग करना मुश्किल है? – svick

+0

एक परिदृश्य जहां मुझे लगता है कि इससे कोई फर्क नहीं पड़ता कि कोड केवल आंशिक रूप से निर्मित होता है। डिफ़ॉल्ट रूप से यह 'वापसी' कीवर्ड मानता है और अर्धविराम वहां होता है, इसलिए यह उन्हें डिफ़ॉल्ट रूप से जोड़ता है - लेकिन यदि अर्धविराम अभी तक टाइप नहीं किया गया है तो क्या होगा? 'वाक्यविन्यास = वाक्यविन्यास। सेमिकोलॉन टोकन (सिंटेक्स फैक्ट्री। मिसिंग टोकन (सिंटेक्सकिंड। सैमिकोलॉन टोकन)); ' –

उत्तर

5

हाँ, साधारण मामलों में, उन कॉल आवश्यक नहीं हैं। The code of RoslynQuoter में RemoveRedundantModifyingCalls विकल्प है, जो मुझे विश्वास है कि आप वही करना चाहते हैं जो आप चाहते हैं। लेकिन यह लागू हो जाता है नहीं, the only usage बाहर टिप्पणी की है:

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

@ svick के जवाब सही है। मैं बस उस कोड को फिर से सक्षम करना भूल गया क्योंकि Roslyn Scripting उपलब्ध नहीं था।

अब जब कि पटकथा सार्वजनिक है, मैं फिर से सक्षम है कि कोड और वेबसाइट को अपडेट: http://roslynquoter.azurewebsites.net/

की तरह आप ऊपर चला जाना चाहिए उल्लेख वेबसाइट अभी, और अनावश्यक कॉल आज़माएं (वे अभी भी हूँ तब दिखाई दें जब उन्हें ट्रिविया/टिप्पणियां/आदि को संशोधित करने की आवश्यकता हो)।

संबंधित मुद्दे