diff --git a/resources/functionalTests/property/5blocks/input.p b/resources/functionalTests/property/5blocks/input.p new file mode 100644 index 00000000..f467d4e7 --- /dev/null +++ b/resources/functionalTests/property/5blocks/input.p @@ -0,0 +1,25 @@ +/* formatterSettingsOverride */ +/* { "AblFormatter.blockFormatting": true, +"AblFormatter.propertyFormatting": true }*/ +class AClass: + define private property m_Total as integer no-undo + get. + set. + + define PUBLIC PROPERTY propertyWidthGetterAndSetter AS SomeClass NO-UNDO + GET: + RETURN ?. + END GET. + SET(INPUT pValue AS SomeClass): + DO: + pValue:CallMethod(). + END. + END SET. + + define PRIVATE VARIABLE propertyWidthGetter_ AS SomeClass NO-UNDO. + define PROTECTED PROPERTY propertyWidthGetter AS SomeClass NO-UNDO + GET(): + + RETURN propertyWidthGetter_. + END GET. +end class. \ No newline at end of file diff --git a/resources/functionalTests/property/5blocks/target.p b/resources/functionalTests/property/5blocks/target.p new file mode 100644 index 00000000..b7521c43 --- /dev/null +++ b/resources/functionalTests/property/5blocks/target.p @@ -0,0 +1,25 @@ +/* formatterSettingsOverride */ +/* { "AblFormatter.blockFormatting": true, +"AblFormatter.propertyFormatting": true }*/ +class AClass: + define private property m_Total as integer no-undo + get. + set. + + define PUBLIC PROPERTY propertyWidthGetterAndSetter AS SomeClass NO-UNDO + GET: + RETURN ?. + END GET. + SET(INPUT pValue AS SomeClass): + DO: + pValue:CallMethod(). + END. + END SET. + + define PRIVATE VARIABLE propertyWidthGetter_ AS SomeClass NO-UNDO. + define PROTECTED PROPERTY propertyWidthGetter AS SomeClass NO-UNDO + GET(): + + RETURN propertyWidthGetter_. + END GET. +end class. \ No newline at end of file diff --git a/resources/functionalTests/property/5blocks2/input.p b/resources/functionalTests/property/5blocks2/input.p new file mode 100644 index 00000000..b98d0f85 --- /dev/null +++ b/resources/functionalTests/property/5blocks2/input.p @@ -0,0 +1,22 @@ +/* formatterSettingsOverride */ +/* { "AblFormatter.blockFormatting": true, +"AblFormatter.propertyFormatting": true }*/ + +class myRequest implements IWebRequest: + define public property Version as character no-undo + get(): + return web-context:get-cgi-value("ENV", "SERVER_PROTOCOL"). + end get. + set(cProp as char): + undo, throw new AppError(GetReadOnlyMessage(),?). + end set. + + define public property ContentType as character no-undo + get(): + return web-context:get-cgi-value("ENV", "CONTENT_TYPE"). + end get. + set(cProp as char): + undo, throw new AppError(GetReadOnlyMessage(),?). + end set. + + end class. \ No newline at end of file diff --git a/resources/functionalTests/property/5blocks2/target.p b/resources/functionalTests/property/5blocks2/target.p new file mode 100644 index 00000000..f164c369 --- /dev/null +++ b/resources/functionalTests/property/5blocks2/target.p @@ -0,0 +1,22 @@ +/* formatterSettingsOverride */ +/* { "AblFormatter.blockFormatting": true, +"AblFormatter.propertyFormatting": true }*/ + +class myRequest implements IWebRequest: + define public property Version as character no-undo + get(): + return web-context:get-cgi-value("ENV", "SERVER_PROTOCOL"). + end get. + set(cProp as char): + undo, throw new AppError(GetReadOnlyMessage(),?). + end set. + + define public property ContentType as character no-undo + get(): + return web-context:get-cgi-value("ENV", "CONTENT_TYPE"). + end get. + set(cProp as char): + undo, throw new AppError(GetReadOnlyMessage(),?). + end set. + +end class. \ No newline at end of file diff --git a/resources/functionalTests/property/5blocks3/input.p b/resources/functionalTests/property/5blocks3/input.p new file mode 100644 index 00000000..f1f570ae --- /dev/null +++ b/resources/functionalTests/property/5blocks3/input.p @@ -0,0 +1,19 @@ +/* formatterSettingsOverride */ +/* { "AblFormatter.blockFormatting": true, +"AblFormatter.propertyFormatting": true }*/ + +class Writer implements IWebRequest: + define static public property Registry as BuilderRegistry no-undo + get(): + define variable oRegistry as BuilderRegistry no-undo. + do: + do transaction: + fun(33). + end. + AuthenticationRequestWriterBuilder:InitializeRegistry(oRegistry). + end. + return AuthenticationRequestWriterBuilder:Registry. + end get. + private set. + + end class. \ No newline at end of file diff --git a/resources/functionalTests/property/5blocks3/target.p b/resources/functionalTests/property/5blocks3/target.p new file mode 100644 index 00000000..eeaf3881 --- /dev/null +++ b/resources/functionalTests/property/5blocks3/target.p @@ -0,0 +1,19 @@ +/* formatterSettingsOverride */ +/* { "AblFormatter.blockFormatting": true, +"AblFormatter.propertyFormatting": true }*/ + +class Writer implements IWebRequest: + define static public property Registry as BuilderRegistry no-undo + get(): + define variable oRegistry as BuilderRegistry no-undo. + do: + do transaction: + fun(33). + end. + AuthenticationRequestWriterBuilder:InitializeRegistry(oRegistry). + end. + return AuthenticationRequestWriterBuilder:Registry. + end get. + private set. + +end class. \ No newline at end of file diff --git a/src/v2/formatters/property/PropertyFormatter.ts b/src/v2/formatters/property/PropertyFormatter.ts index b2d3d014..4a2d2234 100644 --- a/src/v2/formatters/property/PropertyFormatter.ts +++ b/src/v2/formatters/property/PropertyFormatter.ts @@ -4,7 +4,10 @@ import { IFormatter } from "../../formatterFramework/IFormatter"; import { CodeEdit } from "../../model/CodeEdit"; import { FullText } from "../../model/FullText"; import { AFormatter } from "../AFormatter"; -import { SyntaxNodeType } from "../../../model/SyntaxNodeType"; +import { + definitionKeywords, + SyntaxNodeType, +} from "../../../model/SyntaxNodeType"; import { FormatterHelper } from "../../formatterFramework/FormatterHelper"; import { PropertySettings } from "./PropertySettings"; import { IConfigurationManager } from "../../../utils/IConfigurationManager"; @@ -72,15 +75,25 @@ export class PropertyFormatter extends AFormatter implements IFormatter { let newString = ""; switch (node.type) { - case SyntaxNodeType.DefineKeyword: + case definitionKeywords.hasFancy(node.type, ""): newString = FormatterHelper.getCurrentText(node, fullText); break; case SyntaxNodeType.Getter: case SyntaxNodeType.Setter: + const firstLineWhitespace = + FormatterHelper.getActualStatementIndentation( + node, + fullText + ); + const statement = FormatterHelper.addIndentation( + FormatterHelper.getCurrentText(node, fullText).trim(), + -firstLineWhitespace + this.settings.tabSize(), + fullText.eolDelimiter + ); newString = fullText.eolDelimiter + " ".repeat(this.startColumn + this.settings.tabSize()) + - FormatterHelper.getCurrentText(node, fullText).trim(); + statement; break; case SyntaxNodeType.Error: newString = FormatterHelper.getCurrentText(node, fullText);