/*
* Copyright 2010 Jon S Akhtar (Sylvanaar)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sylvanaar.idea.Lua.lang.formatter.processors;
import com.intellij.formatting.Indent;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiComment;
import com.intellij.psi.PsiElement;
import com.sylvanaar.idea.Lua.lang.formatter.blocks.LuaFormattingBlock;
import com.sylvanaar.idea.Lua.lang.parser.LuaElementTypes;
import com.sylvanaar.idea.Lua.lang.psi.expressions.LuaFunctionArguments;
import com.sylvanaar.idea.Lua.lang.psi.expressions.LuaTableConstructor;
import com.sylvanaar.idea.Lua.lang.psi.statements.LuaBlock;
import com.sylvanaar.idea.Lua.lang.psi.statements.LuaStatementElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public abstract class LuaIndentProcessor implements LuaElementTypes {
/**
* Calculates indent, based on code style, between parent block and child node
*
* @param parent parent block
* @param child child node
* @param prevChildNode previous child node
* @return indent
*/
@NotNull
public static Indent getChildIndent(@NotNull final LuaFormattingBlock parent, @Nullable final ASTNode prevChildNode, @NotNull final ASTNode child) {
ASTNode astNode = parent.getNode();
final PsiElement psiParent = astNode.getPsi();
// if (psiParent instanceof LuaAnonymousFunctionExpression)
// return Indent.getNormalIndent();
// For Lua Blocks
if (child.getPsi() instanceof LuaBlock) {
return Indent.getNormalIndent();
}
if (psiParent instanceof LuaTableConstructor) {
if (child.getElementType() == RCURLY)
return Indent.getNoneIndent();
if (child.getElementType() == LCURLY)
return Indent.getContinuationWithoutFirstIndent();
return Indent.getNormalIndent();
}
if ((child.getElementType() == LUADOC_COMMENT || child.getPsi() instanceof PsiComment) && psiParent instanceof LuaStatementElement) {
return Indent.getNormalIndent();
}
if (psiParent.getParent() instanceof LuaFunctionArguments) {
if (child.getElementType() == RPAREN)
return Indent.getNoneIndent();
if (child.getElementType() == LPAREN)
return Indent.getContinuationWithoutFirstIndent();
return Indent.getNormalIndent();
}
// For common code block
// if (BLOCK_SET.contains(astNode.getElementType())) {
// return indentForBlock(psiParent, child);
// }
return Indent.getNoneIndent();
}
// /**
// * Indent for common block
// *
// * @param psiBlock
// * @param child
// * @return
// */
// private static Indent indentForBlock(PsiElement psiBlock, ASTNode child) {
// // Common case
// if (BLOCK_BEGIN_SET.contains(child.getElementType()) ||
// BLOCK_END_SET.contains(child.getElementType())) {
// return Indent.getNoneIndent();
// }
// return Indent.getNormalIndent();
//
//
// }
}