mirror of
https://github.com/icsharpcode/ILSpy.git
synced 2026-10-12 11:09:54 +00:00
Turn on #nullable enable across the AST consumer layer: the output visitor, the IL-to-C# builders (statement, call and expression builders, CSharpDecompiler, TypeSystemAstBuilder), the translation-result wrappers, the sequence-point and required-namespace collectors, and the annotation helpers. Optional inputs, fields and returns are typed nullable, detector out-parameters use [NotNullWhen(true)], and structurally-guaranteed dereferences use the null-forgiving operator. A few public parameters that already tolerate null are widened to match their downstream callers. The annotations emit no IL, so the Pretty suite stays byte-identical. Assisted-by: Claude:claude-opus-4-8:Claude Code
1053 lines
18 KiB
C#
1053 lines
18 KiB
C#
//
|
|
// CSharpFormattingOptions.cs
|
|
//
|
|
// Author:
|
|
// Mike Krüger <[email protected]>
|
|
//
|
|
// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
using System.ComponentModel;
|
|
|
|
#nullable enable
|
|
|
|
namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
|
|
{
|
|
public enum BraceStyle
|
|
{
|
|
EndOfLine,
|
|
EndOfLineWithoutSpace,
|
|
NextLine,
|
|
NextLineShifted,
|
|
NextLineShifted2,
|
|
BannerStyle
|
|
}
|
|
|
|
public enum PropertyFormatting
|
|
{
|
|
SingleLine,
|
|
MultipleLines
|
|
}
|
|
|
|
public enum Wrapping
|
|
{
|
|
DoNotWrap,
|
|
WrapAlways,
|
|
WrapIfTooLong
|
|
}
|
|
|
|
public enum NewLinePlacement
|
|
{
|
|
DoNotCare,
|
|
NewLine,
|
|
SameLine
|
|
}
|
|
|
|
public enum UsingPlacement
|
|
{
|
|
TopOfFile,
|
|
InsideNamespace
|
|
}
|
|
|
|
public enum EmptyLineFormatting
|
|
{
|
|
DoNotChange,
|
|
Indent,
|
|
DoNotIndent
|
|
}
|
|
|
|
[TypeConverter(typeof(ExpandableObjectConverter))]
|
|
public class CSharpFormattingOptions
|
|
{
|
|
public string? Name {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IsBuiltIn {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public CSharpFormattingOptions Clone()
|
|
{
|
|
return (CSharpFormattingOptions)MemberwiseClone();
|
|
}
|
|
|
|
#region Indentation
|
|
public string IndentationString { get; set; } = "\t";
|
|
|
|
public bool IndentNamespaceBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentClassBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentInterfaceBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentStructBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentEnumBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentMethodBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentPropertyBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentEventBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentBlocks { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentSwitchBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentCaseBody { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentBreakStatements { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AlignEmbeddedStatements { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AlignElseInIfStatements {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public PropertyFormatting AutoPropertyFormatting { get; set; }
|
|
|
|
public PropertyFormatting SimplePropertyFormatting { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public EmptyLineFormatting EmptyLineFormatting {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentPreprocessorDirectives { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AlignToMemberReferenceDot { // TODO!
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool IndentBlocksInsideExpressions {
|
|
get;
|
|
set;
|
|
}
|
|
#endregion
|
|
|
|
#region Braces
|
|
public BraceStyle NamespaceBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle ClassBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle InterfaceBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle StructBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle EnumBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle MethodBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle AnonymousMethodBraceStyle {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle ConstructorBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle DestructorBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle PropertyBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle PropertyGetBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle PropertySetBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public PropertyFormatting SimpleGetBlockFormatting { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public PropertyFormatting SimpleSetBlockFormatting { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle EventBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle EventAddBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle EventRemoveBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AllowEventAddBlockInline { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AllowEventRemoveBlockInline { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle StatementBraceStyle { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AllowIfBlockInline {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
bool allowOneLinedArrayInitialziers = true;
|
|
public bool AllowOneLinedArrayInitialziers {
|
|
get {
|
|
return allowOneLinedArrayInitialziers;
|
|
}
|
|
set {
|
|
allowOneLinedArrayInitialziers = value;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region NewLines
|
|
public NewLinePlacement ElseNewLinePlacement { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement ElseIfNewLinePlacement { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement CatchNewLinePlacement { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement FinallyNewLinePlacement { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement WhileNewLinePlacement { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
NewLinePlacement embeddedStatementPlacement = NewLinePlacement.NewLine;
|
|
public NewLinePlacement EmbeddedStatementPlacement {
|
|
get {
|
|
return embeddedStatementPlacement;
|
|
}
|
|
set {
|
|
embeddedStatementPlacement = value;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Spaces
|
|
public bool SpaceBetweenParameterAttributeSections {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
// Methods
|
|
public bool SpaceBeforeMethodDeclarationParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBetweenEmptyMethodDeclarationParentheses {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeMethodDeclarationParameterComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterMethodDeclarationParameterComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceWithinMethodDeclarationParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
// Method calls
|
|
public bool SpaceBeforeMethodCallParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBetweenEmptyMethodCallParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeMethodCallParameterComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterMethodCallParameterComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceWithinMethodCallParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
// fields
|
|
|
|
public bool SpaceBeforeFieldDeclarationComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterFieldDeclarationComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
// local variables
|
|
|
|
public bool SpaceBeforeLocalVariableDeclarationComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterLocalVariableDeclarationComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
// constructors
|
|
|
|
public bool SpaceBeforeConstructorDeclarationParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBetweenEmptyConstructorDeclarationParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeConstructorDeclarationParameterComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterConstructorDeclarationParameterComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceWithinConstructorDeclarationParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement NewLineBeforeConstructorInitializerColon {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement NewLineAfterConstructorInitializerColon {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
// indexer
|
|
public bool SpaceBeforeIndexerDeclarationBracket { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceWithinIndexerDeclarationBracket { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeIndexerDeclarationParameterComma {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterIndexerDeclarationParameterComma {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
// delegates
|
|
|
|
public bool SpaceBeforeDelegateDeclarationParentheses {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBetweenEmptyDelegateDeclarationParentheses {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeDelegateDeclarationParameterComma {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterDelegateDeclarationParameterComma {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceWithinDelegateDeclarationParentheses {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeNewParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeIfParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeWhileParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeForParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeForeachParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeCatchParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeSwitchParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeLockParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeUsingParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundAssignment { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundLogicalOperator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundEqualityOperator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundRelationalOperator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundBitwiseOperator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundAdditiveOperator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundMultiplicativeOperator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundShiftOperator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundNullCoalescingOperator { // Tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterUnsafeAddressOfOperator { // Tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterUnsafeAsteriskOfOperator { // Tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAroundUnsafeArrowOperator { // Tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinIfParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinWhileParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinForParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinForeachParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinCatchParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinSwitchParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinLockParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinUsingParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinCastParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinSizeOfParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeSizeOfParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinTypeOfParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinNewParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesBetweenEmptyNewParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeNewParameterComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterNewParameterComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeTypeOfParentheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesWithinCheckedExpressionParantheses { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeConditionalOperatorCondition { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterConditionalOperatorCondition { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeConditionalOperatorSeparator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterConditionalOperatorSeparator { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeAnonymousMethodParentheses {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceWithinAnonymousMethodParentheses {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
// brackets
|
|
public bool SpacesWithinBrackets { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpacesBeforeBrackets { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeBracketComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterBracketComma { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeForSemicolon { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterForSemicolon { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceAfterTypecast { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeArrayDeclarationBrackets { // tested
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceInNamedArgumentAfterDoubleColon {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool RemoveEndOfLineWhiteSpace {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool SpaceBeforeSemicolon {
|
|
get;
|
|
set;
|
|
}
|
|
#endregion
|
|
|
|
#region Blank Lines
|
|
public int MinimumBlankLinesBeforeUsings {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int MinimumBlankLinesAfterUsings {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int MinimumBlankLinesBeforeFirstDeclaration {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int MinimumBlankLinesBetweenTypes {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int MinimumBlankLinesBetweenFields {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int MinimumBlankLinesBetweenEventFields {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int MinimumBlankLinesBetweenMembers {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int MinimumBlankLinesAroundRegion {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int MinimumBlankLinesInsideRegion {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Keep formatting
|
|
public bool KeepCommentsAtFirstColumn {
|
|
get;
|
|
set;
|
|
}
|
|
#endregion
|
|
|
|
#region Wrapping
|
|
|
|
public Wrapping ArrayInitializerWrapping {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public BraceStyle ArrayInitializerBraceStyle {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public Wrapping ChainedMethodCallWrapping {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public Wrapping MethodCallArgumentWrapping {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement NewLineAferMethodCallOpenParentheses {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement MethodCallClosingParenthesesOnNewLine {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public Wrapping IndexerArgumentWrapping {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement NewLineAferIndexerOpenBracket {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement IndexerClosingBracketOnNewLine {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public Wrapping MethodDeclarationParameterWrapping {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement NewLineAferMethodDeclarationOpenParentheses {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement MethodDeclarationClosingParenthesesOnNewLine {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public Wrapping IndexerDeclarationParameterWrapping {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement NewLineAferIndexerDeclarationOpenBracket {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement IndexerDeclarationClosingBracketOnNewLine {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AlignToFirstIndexerArgument {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AlignToFirstIndexerDeclarationParameter {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AlignToFirstMethodCallArgument {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool AlignToFirstMethodDeclarationParameter {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public NewLinePlacement NewLineBeforeNewQueryClause {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Using Declarations
|
|
public UsingPlacement UsingPlacement {
|
|
get;
|
|
set;
|
|
}
|
|
#endregion
|
|
|
|
internal CSharpFormattingOptions()
|
|
{
|
|
}
|
|
|
|
/*public static CSharpFormattingOptions Load (FilePath selectedFile)
|
|
{
|
|
using (var stream = System.IO.File.OpenRead (selectedFile)) {
|
|
return Load (stream);
|
|
}
|
|
}
|
|
|
|
public static CSharpFormattingOptions Load (System.IO.Stream input)
|
|
{
|
|
CSharpFormattingOptions result = FormattingOptionsFactory.CreateMonoOptions ();
|
|
result.Name = "noname";
|
|
using (XmlTextReader reader = new XmlTextReader (input)) {
|
|
while (reader.Read ()) {
|
|
if (reader.NodeType == XmlNodeType.Element) {
|
|
if (reader.LocalName == "Property") {
|
|
var info = typeof(CSharpFormattingOptions).GetProperty (reader.GetAttribute ("name"));
|
|
string valString = reader.GetAttribute ("value");
|
|
object value;
|
|
if (info.PropertyType == typeof(bool)) {
|
|
value = Boolean.Parse (valString);
|
|
} else if (info.PropertyType == typeof(int)) {
|
|
value = Int32.Parse (valString);
|
|
} else {
|
|
value = Enum.Parse (info.PropertyType, valString);
|
|
}
|
|
info.SetValue (result, value, null);
|
|
} else if (reader.LocalName == "FormattingProfile") {
|
|
result.Name = reader.GetAttribute ("name");
|
|
}
|
|
} else if (reader.NodeType == XmlNodeType.EndElement && reader.LocalName == "FormattingProfile") {
|
|
//Console.WriteLine ("result:" + result.Name);
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public void Save (string fileName)
|
|
{
|
|
using (var writer = new XmlTextWriter (fileName, Encoding.Default)) {
|
|
writer.Formatting = System.Xml.Formatting.Indented;
|
|
writer.Indentation = 1;
|
|
writer.IndentChar = '\t';
|
|
writer.WriteStartElement ("FormattingProfile");
|
|
writer.WriteAttributeString ("name", Name);
|
|
foreach (PropertyInfo info in typeof (CSharpFormattingOptions).GetProperties ()) {
|
|
if (info.GetCustomAttributes (false).Any (o => o.GetType () == typeof(ItemPropertyAttribute))) {
|
|
writer.WriteStartElement ("Property");
|
|
writer.WriteAttributeString ("name", info.Name);
|
|
writer.WriteAttributeString ("value", info.GetValue (this, null).ToString ());
|
|
writer.WriteEndElement ();
|
|
}
|
|
}
|
|
writer.WriteEndElement ();
|
|
}
|
|
}
|
|
|
|
public bool Equals (CSharpFormattingOptions other)
|
|
{
|
|
foreach (PropertyInfo info in typeof (CSharpFormattingOptions).GetProperties ()) {
|
|
if (info.GetCustomAttributes (false).Any (o => o.GetType () == typeof(ItemPropertyAttribute))) {
|
|
object val = info.GetValue (this, null);
|
|
object otherVal = info.GetValue (other, null);
|
|
if (val == null) {
|
|
if (otherVal == null)
|
|
continue;
|
|
return false;
|
|
}
|
|
if (!val.Equals (otherVal)) {
|
|
//Console.WriteLine ("!equal");
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
//Console.WriteLine ("== equal");
|
|
return true;
|
|
}*/
|
|
}
|
|
}
|