/** * Copyright (c) 2012-2016 André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.repl.console; import java.util.List; import java.util.Optional; import com.github.anba.es6draft.runtime.internal.Console; /** * Interactive shell console interface. */ public interface ShellConsole extends Console { /** * Checks whether or not ANSI mode is supported. (Optional method) * * @return {@code true} if ANSI mode is supported */ default boolean isAnsiSupported() { return false; } /** * Installs tab-completion support. (Optional method) * * @param completer * the shell completer */ default void addCompleter(Completer completer) { } /** * Shell completer interface. */ interface Completer { /** * Tab-completion. * * @param line * the current line * @param cursor * the line cursor * @return the tab completion result */ Optional<Completion> complete(String line, int cursor); } /** * Shell completion result. */ final class Completion { private final String line; private final int start, end; private final List<String> result; /** * Constructs a new tab-completion result. * * @param line * the input line * @param start * the start position * @param end * the end position * @param result * the completion result */ public Completion(String line, int start, int end, List<String> result) { this.line = line; this.start = start; this.end = end; this.result = result; } /** * Returns the line. * * @return the input line */ public String line() { return line; } /** * Returns the start position. * * @return the start position */ public int start() { return start; } /** * Returns the end position. * * @return the end position */ public int end() { return end; } /** * Returns the completion result. * * @return the completion result */ public List<String> result() { return result; } } }