Module: Kward::PromptInterface::EditorEndwise
- Included in:
- Kward::PromptInterface
- Defined in:
- lib/kward/prompt_interface/editor/endwise.rb
Overview
Endwise-style closing keyword insertion for the built-in editor.
Constant Summary collapse
- ENDWISE_LINE_PARSE_LIMIT =
100_000- ENDWISE_SINGLE_LINE_DEFINITION =
/;\s*end[\s;]*\z/.freeze
- ENDWISE_ENDLESS_DEFINITION =
/\A\s*?def\s+[^\s(]+\s*(?:\(.*\))?\s*=/.freeze
- ENDWISE_LANGUAGES =
{ ruby: { line_comments: ["#"], block_comments: [{ start: /\A\s*=begin\b/, end: /\A\s*=end\b/ }], close_pattern: /\Aend\b/, openings: [ { pattern: /\A\s*?if(\s|\()/, close: "end" }, { pattern: /\A\s*?unless(\s|\()/, close: "end" }, { pattern: /\A\s*?while(\s|\()/, close: "end" }, { pattern: /\A\s*?for(\s|\()/, close: "end" }, { pattern: /\s?do(\s?\z|\s\|.*\|\s?\z)/, close: "end" }, { pattern: /\A\s*?def\s/, close: "end" }, { pattern: /\A\s*?class\s/, close: "end" }, { pattern: /\A\s*?module\s/, close: "end" }, { pattern: /\A\s*?case(\s|\()/, close: "end" }, { pattern: /\A\s*?begin\s/, close: "end" }, { pattern: /\A\s*?until(\s|\()/, close: "end" } ] }, crystal: { line_comments: ["#"], block_comments: [], close_pattern: /\Aend\b/, openings: [ { pattern: /\A\s*?if(\s|\()/, close: "end" }, { pattern: /\A\s*?unless(\s|\()/, close: "end" }, { pattern: /\A\s*?while(\s|\()/, close: "end" }, { pattern: /\A\s*?for(\s|\()/, close: "end" }, { pattern: /\s?do(\s?\z|\s\|.*\|\s?\z)/, close: "end" }, { pattern: /\A\s*?enum\s/, close: "end" }, { pattern: /\A\s*?struct\s/, close: "end" }, { pattern: /\A\s*?macro\s/, close: "end" }, { pattern: /\A\s*?union\s/, close: "end" }, { pattern: /\A\s*?lib\s/, close: "end" }, { pattern: /\A\s*?annotation\s/, close: "end" }, { pattern: /\A\s*?def\s/, close: "end" }, { pattern: /\A\s*?class\s/, close: "end" }, { pattern: /\A\s*?module\s/, close: "end" }, { pattern: /\A\s*?case(\s|\()/, close: "end" }, { pattern: /\A\s*?begin\s/, close: "end" }, { pattern: /\A\s*?until(\s|\()/, close: "end" } ] }, elixir: { line_comments: ["#"], block_comments: [], close_pattern: /\Aend\b/, openings: [ { pattern: /\bdo\s*\z/, close: "end" }, { pattern: /\A\s*fn\s*\z/, close: "end" }, { pattern: /\bfn\b.*->\s*\z/, close: "end" } ] }, julia: { line_comments: ["#"], block_comments: [], close_pattern: /\Aend\b/, openings: [ { pattern: /\A\s*begin\s*\z/, close: "end" }, { pattern: /\A\s*if\b/, close: "end" }, { pattern: /\A\s*while\b/, close: "end" }, { pattern: /\A\s*for\b/, close: "end" }, { pattern: /\A\s*try\s*\z/, close: "end" }, { pattern: /\A\s*let(?:\s|\z)/, close: "end" }, { pattern: /\A\s*quote\s*\z/, close: "end" }, { pattern: /\A\s*function\b/, close: "end" }, { pattern: /\A\s*macro\b/, close: "end" }, { pattern: /\A\s*module\b/, close: "end" }, { pattern: /\A\s*baremodule\b/, close: "end" }, { pattern: /\A\s*(?:mutable\s+)?struct\b/, close: "end" }, { pattern: /\A\s*abstract\s+type\b/, close: "end" }, { pattern: /\A\s*primitive\s+type\b/, close: "end" }, { pattern: /\bdo(?:\s+.*)?\s*\z/, close: "end" } ] }, lua: { line_comments: ["--"], block_comments: [{ start: /\A\s*--\[\[/, end: /\]\]/ }], close_pattern: /\Aend\b/, openings: [ { pattern: /\A\s*do\s*\z/, close: "end" }, { pattern: /\A\s*while\b.*\bdo\s*\z/, close: "end" }, { pattern: /\A\s*if\b.*\bthen\s*\z/, close: "end" }, { pattern: /\A\s*for\b.*\bdo\s*\z/, close: "end" }, { pattern: /\A\s*(?:local\s+)?function\b.*\)\s*\z/, close: "end" } ] }, makefile: { line_comments: ["#"], block_comments: [], close_pattern: /\Aendif\b/, openings: [ { pattern: /\A\s*if(?:eq|neq)\b/, close: "endif" }, { pattern: /\A\s*ifn?def\b/, close: "endif" } ] }, shell: { line_comments: ["#"], block_comments: [], close_pattern: /\A(?:fi|done|esac)\b/, openings: [ { pattern: /\bthen\s*\z/, close: "fi" }, { pattern: /\A\s*case\b/, close: "esac" }, { pattern: /\bdo\s*\z/, close: "done" } ] } }.freeze