/******************************************************************************* * Copyright (c) 2015 Bruno Medeiros and other Contributors. * 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 * * Contributors: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package melnorme.lang.tooling; import static melnorme.utilbox.core.Assert.AssertNamespace.assertUnreachable; @LANG_SPECIFIC public enum CompletionProposalKind { UNKNOWN, KEYWORD, ERROR, // The rest, based upon https://github.com/phildawes/racer/blob/master/src/racer/mod.rs#L22 Struct, Module, MatchArm, Function, Crate, Let, IfLet, StructField, Impl, Enum, EnumVariant, Type, FnArg, Trait, Const, Static; public <RET> RET switchOnKind(ProposalKindVisitor<RET> visitor) { switch(this) { case UNKNOWN: return visitor.visitUnknown(); case KEYWORD: return visitor.visitKeyword(); case ERROR: return visitor.visitError(); case Let: return visitor.visitVariable(); case IfLet: return visitor.visitVariable(); case FnArg: return visitor.visitVariable(); case Function: return visitor.visitFunction(); case Struct: return visitor.visitStruct(); case Type: return visitor.visitType(); case StructField: return visitor.visitVariable(); case Module: return visitor.visitModule(); case Trait: return visitor.visitTrait(); case Const: return visitor.visitConst(); case Static: return visitor.visitStatic(); case Crate: return visitor.visitOther(); case Enum: return visitor.visitEnum(); case EnumVariant: return visitor.visitEnumVariant(); case Impl: return visitor.visitImpl(); case MatchArm: return visitor.visitMatchArm(); } throw assertUnreachable(); } public static interface ProposalKindVisitor<RET> extends AbstractKindVisitor<RET> { RET visitError(); public abstract RET visitType(); public abstract RET visitTrait(); public abstract RET visitConst(); public abstract RET visitStatic(); public abstract RET visitEnumVariant(); public abstract RET visitImpl(); public abstract RET visitMatchArm(); public abstract RET visitOther(); public abstract RET visitCrate(); } }