package org.jetbrains.plugins.clojure.parser;
import com.intellij.psi.stubs.EmptyStub;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.IStubFileElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.plugins.clojure.lexer.ClojureTokenTypes;
import org.jetbrains.plugins.clojure.psi.ClStubElementType;
import org.jetbrains.plugins.clojure.psi.api.ClKeyword;
import org.jetbrains.plugins.clojure.psi.api.defs.ClDef;
import org.jetbrains.plugins.clojure.psi.api.ns.ClNs;
import org.jetbrains.plugins.clojure.psi.impl.list.ClListImpl;
import org.jetbrains.plugins.clojure.psi.stubs.api.ClDefStub;
import org.jetbrains.plugins.clojure.psi.stubs.api.ClKeywordStub;
import org.jetbrains.plugins.clojure.psi.stubs.api.ClNsStub;
import org.jetbrains.plugins.clojure.psi.stubs.elements.*;
import org.jetbrains.plugins.clojure.psi.stubs.elements.ns.ClCreateNsElementType;
import org.jetbrains.plugins.clojure.psi.stubs.elements.ns.ClInNsElementType;
import org.jetbrains.plugins.clojure.psi.stubs.elements.ns.ClNsElementType;
/**
* User: peter
* Date: Nov 21, 2008
* Time: 9:46:12 AM
* Copyright 2007, 2008, 2009 Red Shark Technology
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* 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.
*/
public interface ClojureElementTypes extends ClojureTokenTypes {
final IStubFileElementType FILE = new ClStubFileElementType();
final IElementType TOPLIST = new ClojureElementType("toplist");
final ClStubElementType<EmptyStub, ClListImpl> LIST = new ClListElementType();
final IElementType VECTOR = new ClojureElementType("vector");
final IElementType MAP = new ClojureElementType("map");
final IElementType SET = new ClojureElementType("map");
final ClStubElementType<ClDefStub, ClDef> DEF = new ClDefElementType();
final ClStubElementType<ClDefStub, ClDef> DEFMETHOD = new ClDefMethodElementType();
final ClStubElementType<ClKeywordStub, ClKeyword> KEYWORD = new ClKeywordElementType();
final ClStubElementType<ClNsStub, ClNs> NS = new ClNsElementType();
final ClStubElementType<ClNsStub, ClNs> IN_NS = new ClInNsElementType();
final ClStubElementType<ClNsStub, ClNs> CREATE_NS = new ClCreateNsElementType();
final IElementType MAP_ENTRY = new ClojureElementType("map");
final IElementType LITERAL = new ClojureElementType("literal");
final IElementType SYMBOL = new ClojureElementType("symbol");
final IElementType IMPLICIT_ARG = new ClojureElementType("function argument");
final IElementType BINDINGS = new ClojureElementType("bindings");
final IElementType REST = new ClojureElementType("rest");
final IElementType AS = new ClojureElementType("as");
final IElementType EXPRESSION = new ClojureElementType("expression");
final IElementType QUOTED_FORM = new ClojureElementType("quoted expression");
final IElementType BACKQUOTED_EXPRESSION = new ClojureElementType("backquoted expression");
final IElementType SHARP_EXPRESSION = new ClojureElementType("pound expression");
final IElementType META_FORM = new ClojureElementType("up expression");
final IElementType METADATA = new ClojureElementType("poundup expression");
final IElementType TILDA_EXPRESSION = new ClojureElementType("tilda expression");
final IElementType AT_EXPRESSION = new ClojureElementType("at expression");
final IElementType TILDAAT_EXPRESSION = new ClojureElementType("tildaat expression");
TokenSet LIST_LIKE_FORMS = TokenSet.create(LIST, VECTOR, MAP, SET, DEF, DEFMETHOD, NS, IN_NS, CREATE_NS);
TokenSet BRACES = TokenSet.create(LEFT_CURLY, LEFT_PAREN, LEFT_SQUARE,
RIGHT_CURLY, RIGHT_PAREN, RIGHT_SQUARE);
TokenSet MODIFIERS = TokenSet.create(SHARP, UP, SHARPUP, TILDA, AT, TILDAAT, QUOTE, BACKQUOTE);
}