| /******************************************************************************* |
| * Copyright (c) 2011, 2019 Willink Transformations and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * E.D.Willink - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.qvtd.xtext.qvtbase.formatting; |
| |
| import com.google.inject.Inject; |
| import org.eclipse.xtext.formatting.impl.FormattingConfig; |
| import org.eclipse.ocl.xtext.essentialocl.formatting.AbstractEssentialOCLFormatter; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.AttributeCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.CompoundTargetElementCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.DataTypeCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.EnumerationCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.EnumerationLiteralCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.OperationCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.ParameterCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.ReferenceCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.SimpleTargetElementCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.StructuredClassCSElements; |
| import org.eclipse.qvtd.xtext.qvtbase.services.QVTbaseGrammarAccess.TargetCSElements; |
| |
| /** |
| * This class contains custom formatting declarations. |
| * |
| * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#formatting |
| * on how and when to use it. |
| * |
| * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example |
| */ |
| public class QVTbaseFormatter extends AbstractEssentialOCLFormatter { |
| |
| @SuppressWarnings("unused") |
| @Inject |
| private QVTbaseGrammarAccess grammarAccess; |
| |
| protected void configureAttributeCS(FormattingConfig c, AttributeCSElements a) { |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_5_0(), a.getRightCurlyBracketKeyword_5_2()); |
| c.setNoSpace().around(a.getCommaKeyword_5_1_1()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_6_1()); |
| setBraces(c, a.getLeftCurlyBracketKeyword_6_0_0(), a.getRightCurlyBracketKeyword_6_0_2()); |
| // |
| c.setNoSpace().before(a.getColonKeyword_6_0_1_1_2()); |
| c.setSpace(" ").after(a.getColonKeyword_6_0_1_1_2()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_6_0_1_1_4()); |
| c.setIndentation(a.getColonKeyword_6_0_1_1_2(), a.getSemicolonKeyword_6_0_1_1_4()); |
| } |
| |
| protected void configureCompoundTargetElementCS(FormattingConfig c, CompoundTargetElementCSElements a) { |
| c.setNoSpace().before(a.getSemicolonKeyword_3()); |
| } |
| |
| protected void configureDataTypeCS(FormattingConfig c, DataTypeCSElements a) { |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_5_0(), a.getRightCurlyBracketKeyword_5_2()); |
| setBraces(c, a.getLeftCurlyBracketKeyword_6_0_0(), a.getRightCurlyBracketKeyword_5_2()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_6_1()); |
| } |
| |
| protected void configureEnumerationCS(FormattingConfig c, EnumerationCSElements a) { |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_4_0(), a.getRightCurlyBracketKeyword_4_2()); |
| // setBraces(c, a.getLeftCurlyBracketKeyword_4_0(), a.getRightCurlyBracketKeyword_4_2()); |
| setBraces(c, a.getLeftCurlyBracketKeyword_5_0_0(), a.getRightCurlyBracketKeyword_5_0_2()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_5_1()); |
| } |
| |
| protected void configureEnumerationLiteralCS(FormattingConfig c, EnumerationLiteralCSElements a) { |
| // c.setNoSpace().around(a.getColonKeyword_1_0()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_2_1()); |
| } |
| |
| protected void configureOperationCS(FormattingConfig c, OperationCSElements a) { |
| c.setNoSpace().around(a.getLeftParenthesisKeyword_4()); |
| c.setNoSpace().before(a.getCommaKeyword_5_1_0()); |
| c.setNoSpace().before(a.getRightParenthesisKeyword_6()); |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_9_0(), a.getRightCurlyBracketKeyword_9_2()); |
| c.setNoSpace().around(a.getCommaKeyword_9_1_1()); |
| setBraces(c, a.getLeftCurlyBracketKeyword_10_0_0(), a.getRightCurlyBracketKeyword_10_0_2()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_10_1()); |
| c.setIndentation(a.getLeftParenthesisKeyword_4(), a.getRightParenthesisKeyword_6()); |
| // |
| c.setNoSpace().before(a.getColonKeyword_10_0_1_2()); |
| c.setSpace(" ").after(a.getColonKeyword_10_0_1_2()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_10_0_1_4()); |
| c.setIndentation(a.getColonKeyword_10_0_1_2(), a.getSemicolonKeyword_10_0_1_4()); |
| } |
| |
| /* protected void configureDataTypeCS(FormattingConfig c, DataTypeCSElements a) { |
| PackageCSElements a = f.getPackageCSAccess(); |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_4_0_0(), a.getRightCurlyBracketKeyword_4_0_2()); |
| setBraces(c, a.getLeftCurlyBracketKeyword_4_0_0(), a.getRightCurlyBracketKeyword_4_0_2()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_4_1()); |
| } */ |
| |
| protected void configureParameterCS(FormattingConfig c, ParameterCSElements a) { |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_2_0(), a.getRightCurlyBracketKeyword_2_2()); |
| c.setNoSpace().around(a.getCommaKeyword_2_1_1()); |
| setBraces(c, a.getLeftCurlyBracketKeyword_3_0(), a.getRightCurlyBracketKeyword_3_1()); |
| } |
| |
| protected void configureReferenceCS(FormattingConfig c, ReferenceCSElements a) { |
| c.setNoSpace().around(a.getNumberSignKeyword_3_0()); |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_6_0(), a.getRightCurlyBracketKeyword_6_2()); |
| c.setNoSpace().around(a.getCommaKeyword_6_1_1()); |
| setBraces(c, a.getLeftCurlyBracketKeyword_7_0_0(), a.getRightCurlyBracketKeyword_7_0_2()); |
| // c.setNoSpace().before(a.getCommaKeyword_7_0_1_1_2_0()); |
| // |
| // setNoSpaceLineWrap(c, a.getSemicolonKeyword_7_0_1_1_3()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_7_1()); |
| // |
| // c.setNoSpace().before(a.getColonKeyword_7_0_1_2_2()); |
| // c.setSpace(" ").after(a.getColonKeyword_7_0_1_2_2()); |
| // setNoSpaceLineWrap(c, a.getSemicolonKeyword_7_0_1_2_4()); |
| // c.setIndentation(a.getColonKeyword_7_0_1_2_2(), a.getSemicolonKeyword_7_0_1_2_4()); |
| // |
| // c.setNoSpace().before(a.getColonKeyword_7_0_1_3_2()); |
| // c.setSpace(" ").after(a.getColonKeyword_7_0_1_3_2()); |
| // setNoSpaceLineWrap(c, a.getSemicolonKeyword_7_0_1_3_4()); |
| // c.setIndentation(a.getColonKeyword_7_0_1_3_2(), a.getSemicolonKeyword_7_0_1_3_4()); |
| // |
| // setNoSpaceLineWrap(c, a.getSemicolonKeyword_7_0_1_4_1()); |
| } |
| |
| protected void configureSimpleTargetElementCS(FormattingConfig c, SimpleTargetElementCSElements a) { |
| c.setNoSpace().before(a.getCommaKeyword_2_1_1_1_1_0()); |
| c.setNoSpace().before(a.getSemicolonKeyword_3()); |
| } |
| |
| protected void configureStructuredClassCS(FormattingConfig c, StructuredClassCSElements a) { |
| c.setNoSpace().around(a.getCommaKeyword_4_2_0()); |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_6_0(), a.getRightCurlyBracketKeyword_6_2()); |
| setBraces(c, a.getLeftCurlyBracketKeyword_7_0_0(), a.getRightCurlyBracketKeyword_7_0_2()); |
| setNoSpaceLineWrap(c, a.getSemicolonKeyword_7_1()); |
| } |
| |
| protected void configureTargetCS(FormattingConfig c, TargetCSElements a) { |
| setAppendedBraces(c, a.getLeftCurlyBracketKeyword_2(), a.getRightCurlyBracketKeyword_4()); |
| c.setNoSpace().between(a.getLeftCurlyBracketKeyword_2(), a.getRightCurlyBracketKeyword_4()); |
| c.setLinewrap(1).between(a.getOwnedTargetElementsAssignment_3(), a.getOwnedTargetElementsAssignment_3()); |
| // c.setIndentation(a.getGroup(), a.getGroup()); |
| } |
| |
| /* protected void configureTemplateBindingCS(FormattingConfig c, TemplateBindingCSElements a) { |
| // c.setNoSpace().around(a.getLeftParenthesisKeyword_0_0()); |
| c.setNoSpace().before(a.getCommaKeyword_1_0()); |
| // c.setNoSpace().before(a.getRightParenthesisKeyword_0_3()); |
| // c.setIndentation(a.getLeftParenthesisKeyword_0_0(), a.getRightParenthesisKeyword_0_3()); |
| // c.setNoSpace().around(a.getLessThanSignKeyword_1_0()); |
| // c.setNoSpace().before(a.getCommaKeyword_1_2_0()); |
| // c.setNoSpace().before(a.getGreaterThanSignKeyword_1_3()); |
| // c.setIndentation(a.getLessThanSignKeyword_1_0(), a.getGreaterThanSignKeyword_1_3()); |
| } */ |
| |
| /* protected void configureTemplateSignatureCS(FormattingConfig c, TemplateSignatureCSElements a) { |
| c.setNoSpace().around(a.getLeftParenthesisKeyword_0_0()); |
| c.setNoSpace().before(a.getCommaKeyword_0_2_0()); |
| c.setNoSpace().before(a.getRightParenthesisKeyword_0_3()); |
| c.setIndentation(a.getLeftParenthesisKeyword_0_0(), a.getRightParenthesisKeyword_0_3()); |
| c.setNoSpace().around(a.getLessThanSignKeyword_1_0()); |
| c.setNoSpace().before(a.getCommaKeyword_1_2_0()); |
| c.setNoSpace().before(a.getGreaterThanSignKeyword_1_3()); |
| c.setIndentation(a.getLessThanSignKeyword_1_0(), a.getGreaterThanSignKeyword_1_3()); |
| } */ |
| |
| /* protected void configureTypedTypeRefCS(FormattingConfig c, TypedTypeRefCSElements a) { |
| c.setNoSpace().around(a.getLeftParenthesisKeyword_1_0_0()); |
| // c.setNoSpace().before(a.getCommaKeyword_1_0()); |
| c.setNoSpace().before(a.getRightParenthesisKeyword_1_0_2()); |
| c.setIndentation(a.getLeftParenthesisKeyword_1_0_0(), a.getRightParenthesisKeyword_1_0_2()); |
| c.setNoSpace().around(a.getLessThanSignKeyword_1_1_0()); |
| // c.setNoSpace().before(a.getCommaKeyword_1_2_0()); |
| c.setNoSpace().before(a.getGreaterThanSignKeyword_1_1_2()); |
| c.setIndentation(a.getLessThanSignKeyword_1_1_0(), a.getGreaterThanSignKeyword_1_1_2()); |
| } */ |
| |
| @Override |
| protected void configureFormatting(FormattingConfig c) { |
| // It's usually a good idea to activate the following three statements. |
| // They will add and preserve newlines around comments |
| // c.setLinewrap(0, 1, 2).before(grammarAccess.getSL_COMMENTRule()); |
| // c.setLinewrap(0, 1, 2).before(grammarAccess.getML_COMMENTRule()); |
| // c.setLinewrap(0, 1, 1).after(grammarAccess.getML_COMMENTRule()); |
| } |
| } |