/* * Copyright (c) 2014 Google Inc. * * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse * Public License v1.0 which accompanies this distribution, and is available at * * http://www.eclipse.org/legal/epl-v10.html */ package com.google.eclipse.protobuf.formatting; import static com.google.eclipse.protobuf.grammar.CommonKeyword.CLOSING_BRACKET; import static com.google.eclipse.protobuf.grammar.CommonKeyword.CLOSING_CURLY_BRACKET; import static com.google.eclipse.protobuf.grammar.CommonKeyword.EQUAL; import static com.google.eclipse.protobuf.grammar.CommonKeyword.OPENING_BRACKET; import static com.google.eclipse.protobuf.grammar.CommonKeyword.OPENING_CURLY_BRACKET; import static com.google.eclipse.protobuf.grammar.CommonKeyword.SEMICOLON; import static com.google.eclipse.protobuf.util.CommonWords.space; import com.google.eclipse.protobuf.services.ProtobufGrammarAccess; import org.eclipse.xtext.Keyword; import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter; import org.eclipse.xtext.formatting.impl.FormattingConfig; /** * Provides custom formatting. * * @author alruiz@google.com (Alex Ruiz) * * @see <a href="http://www.eclipse.org/Xtext/documentation/2_0_0/105-formatting.php">Xtext Formatting</a> */ public class ProtobufFormatter extends AbstractDeclarativeFormatter { @Override protected void configureFormatting(FormattingConfig c) { ProtobufGrammarAccess g = (ProtobufGrammarAccess) getGrammarAccess(); c.setLinewrap(0, 1, 2).before(g.getSL_COMMENTRule()); c.setLinewrap(2).after(g.getSyntaxRule()); c.setLinewrap(2).after(g.getPackageRule()); c.setLinewrap(1).after(g.getNormalImportRule()); c.setLinewrap(1).after(g.getPublicImportRule()); c.setLinewrap(1).after(g.getWeakImportRule()); c.setLinewrap(1).after(g.getNativeOptionRule()); c.setLinewrap(1).after(g.getCustomOptionRule()); c.setLinewrap(2).after(g.getMessageRule()); c.setLinewrap(1).after(g.getMessageFieldRule()); c.setLinewrap(1).after(g.getGroupRule()); c.setLinewrap(2).after(g.getEnumRule()); c.setLinewrap(1).after(g.getEnumElementRule()); c.setLinewrap(1).after(g.getExtensionsRule()); c.setLinewrap(1).after(g.getRpcRule()); c.setLinewrap(2).after(g.getServiceRule()); c.setLinewrap(1).after(g.getStreamRule()); c.setLinewrap(1).between(g.getCHUNKRule(), g.getCHUNKRule()); c.setLinewrap(1).between(g.getML_COMMENTRule(), g.getCHUNKRule()); c.setIndentationIncrement().before(g.getStringLiteralRule()); c.setIndentationDecrement().after(g.getStringLiteralRule()); for (Keyword k : g.findKeywords(EQUAL.toString())) { c.setSpace(space()).around(k); } for (Keyword k : g.findKeywords(SEMICOLON.toString())) { c.setNoSpace().before(k); } for (Keyword k : g.findKeywords(",")) { c.setNoSpace().before(k); c.setSpace(space()).after(k); } for (Keyword k : g.findKeywords(OPENING_CURLY_BRACKET.toString())) { c.setIndentationIncrement().after(k); c.setLinewrap(1).after(k); } for (Keyword k : g.findKeywords(CLOSING_CURLY_BRACKET.toString())) { c.setIndentationDecrement().before(k); c.setLinewrap(1).after(k); } for (Keyword k : g.findKeywords(OPENING_BRACKET.toString(), "(")) { c.setNoSpace().after(k); } for (Keyword k : g.findKeywords(CLOSING_BRACKET.toString(), ")")) { c.setNoSpace().before(k); } } }