class NameParser extends AbstractParser<NameAST> {
	/**
	 * Create name parser with parent context.
	 *
	 * @param parent
	 * 		Parent parser.
	 */
	public NameParser(AbstractParser parent) {
		super(parent);
	}

	@Override
	public NameAST visit(int lineNo, String line) throws ASTParseException {
		try {
			String trim = line.trim();
			if (trim.isEmpty())
				throw new ASTParseException(lineNo, "Name cannot be empty!");
			trim = EscapeUtil.unescape(trim);
			int start = line.indexOf(trim);
			return new NameAST(lineNo, getOffset() + start, trim);
		} catch (Exception ex) {
			throw new ASTParseException(ex, lineNo, "Bad format for name");
		}
	}

	@Override
	public List<String> suggest(ParseResult<RootAST> lastParse, String text) {<FILL_FUNCTION_BODY>}
}

		// No context of last parse, can't pull names from last parsed AST
		// No context parent parser, unsure what to suggest
		if (lastParse == null || parent == null)
			return Collections.emptyList();
		// Complete labels if we belong to a label parser
		boolean tableParent = parent instanceof TableSwitchInsnParser || parent instanceof LookupSwitchInsnParser;
		if (parent instanceof TryCatchParser || parent instanceof JumpInsnParser || parent instanceof LineInsnParser
			|| tableParent) {
			return lastParse.getRoot().search(LabelAST.class).stream()
					.map(l -> l.getName().getName())
					.filter(n -> n.startsWith(text))
					.collect(Collectors.toList());
		}
		// Complete variable names if we belong to a variable parser
		else if (parent instanceof VarInsnParser || parent instanceof IincInsnParser) {
			return lastParse.getRoot().search(NameAST.class).stream()
					.filter(ast -> ast.getName().startsWith(text))
					.filter(ast -> ast.getParent() instanceof VarInsnAST || ast.getParent() instanceof DefinitionArgAST)
					.map(NameAST::getName)
					.distinct()
					.sorted()
					.collect(Collectors.toList());
		}
		return Collections.emptyList();
	
<methods>public void <init>() ,public void <init>(AbstractParser#RAW) ,public int getOffset() ,public void setOffset(int) ,public List<java.lang.String> suggest(ParseResult<me.coley.recaf.parse.bytecode.ast.RootAST>, java.lang.String) ,public abstract me.coley.recaf.parse.bytecode.ast.NameAST visit(int, java.lang.String) throws me.coley.recaf.parse.bytecode.exception.ASTParseException<variables>private int offset,protected final non-sealed AbstractParser#RAW parent