2017-02-22 3 views
0

Я использую Roslyn для создания того, что должно быть генератором агностического кода языка для некоторого уровня доступа к данным. Он будет использовать метаданные для вывода желаемого кода. Ожидается, что будут возвращены версии кода C# и VB.NET.Создайте хорошо форматированный синтаксис с нулевым типом с Roslyn при генерации языкового агностического кода

Текущая реализация генерирует желаемый результат, однако типы нулевых значений не хорошо отформатированы, выход содержит дополнительные пробелы.

Есть ли опция обеспечения типа nullable, сгенерированного SyntaxGenerator.NullableTypeExpression, вернуть хорошо отформатированный - без пробелов - декларация?

фрагменты кода

Это где SyntaxGenerator.NullableTypeExpression используется для возврата SyntaxNode, соответствующий типу недвижимости.

private SyntaxNode ToTypeExpression(Type type, bool nullable, SyntaxGenerator generator) 
    { 

     SyntaxNode baseType; 
     SyntaxNode propType; 

     SpecialType specialType = ToSpecialType(type); 

     if(specialType == SpecialType.None) 
     { 
      baseType = generator.IdentifierName(type.Name);     
     } 
     else 
     { 
      baseType = generator.TypeExpression(specialType); 
     } 

     if (nullable && type.IsValueType) 
     { 
      propType = generator.NullableTypeExpression(baseType); 
     } 
     else 
     { 
      propType = baseType; 
     } 

     return propType; 

    } 

Это сгенерированный код VB.NET:

Public Property Salary As Integer? 
     Get 
      Return GetAttributeValue(Of Integer?)("salary").Value 
     End Get 

     Set(value As Integer?) 
      SetPropertyValue("Salary", "salary", value) 
     End Set 
    End Property 

Это C# код, примечания белых пространств:

public int ? Salary 
    { 
     get 
     { 
      return GetAttributeValue<int ? >("salary").Value; 
     } 

     set 
     { 
      SetPropertyValue("Salary", "salary", value); 
     } 
    } 
+0

Каков ваш вопрос? –

+0

Echoing Ed, что такое сообщение об ошибке, ожидаемое состояние и т. Д. Здесь? –

+1

Вы пробовали '.W ithAdditionalAnnotat ионы (Formatter.Annot ation)'? –

ответ

0

Использование Formatter.Format, как предполагает здесь: Generating well-formatted syntax with Roslyn , удалили нежелательные пробелы.

 string textOutput; 
     var sb = new StringBuilder(); 

     var result = generator.CompilationUnit(declarations); 

     var formattedResult = Formatter.Format(result, workspace); 

     using (StringWriter writer = new StringWriter(sb)) 
     { 
      formattedResult.WriteTo(writer); 
      textOutput = writer.ToString(); 
     } 
Смежные вопросы