JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://codemirror.net/lib/codemirror.js"></script>
<link rel="stylesheet" href="http://codemirror.net/lib/codemirror.css">
<script src="http://codemirror.net/addon/mode/overlay.js"></script>
<script src="http://codemirror.net/addon/hint/show-hint.js"></script>
<link rel="stylesheet" href="http://codemirror.net//addon/hint/show-hint.css">
<textarea rows="30" cols="50" name="log" id="log" class="form-control"></textarea>

JavaScript

var $ELIST = [["squat", 48],["military press", 40],["deadlift", 39],["bench press", 33],["high-bar squat", 31],["clean and jerk", 18],["comment", 16],["power clean", 16],["bent over row", 13],["front squat", 11],["clean", 7],["overhead squat", 7],["hang snatch", 6],["jerk", 5],["snatch balance", 5],["clean pull", 4],["close grip lat pulldown", 4],["snatch pull", 3],["snatch", 2],["tall clean", 2],["high-hang snatch", 2],["hang clean", 2],["t-bar bent over row", 2],["face pull", 1],["leg press", 1],["bent row", 1],["curl", 1],["mid-hang snatch pull", 1],["dip", 1],["snatch grip deadlift", 1],["dumbbell fly", 1],["overhead press", 0]];

function getHints(cm) {
    var cur = cm.getCursor(),
        token = cm.getTokenAt(cur),
        str = token.string,
        ustr = $.trim(token.string.substr(1)),
        arr = [],
        list = [];
    if (str.indexOf("#") !== 0) {
        return null;
    }
    for (var i = 0; i < $ELIST.length; i++) {
        if ((ustr == "") || $ELIST[i][0].toLowerCase().indexOf(ustr.toLowerCase()) > -1) {
            arr.push($ELIST[i]);
        }
    }
    arr.sort();
    for (i = 0; i < arr.length; i++) {
        list.push("#" + arr[i][0] + " ");
    }
    var t = "#" + ustr + " ";
    if (arr.length && (ustr != "")) {
        if (arr.length < 2 || list[0].toLowerCase() != t.toLowerCase()) {
            list.unshift({
                displayText: "Create: " + ustr,
                text: t
            });
        }
    } else {
        if (list.length == 1) {
            list.unshift({
                displayText: "Create: " + ustr,
                text: t
            });
        }
    }
    var o = {
        list: list,
        from: CodeMirror.Pos(cur.line, token.start),
        to: CodeMirror.Pos(cur.line, token.end)
    };
    return o;
}

function sortEList(a, b) {
    return b[1] - a[1];
}

$(document).ready(function(){
    CodeMirror.registerHelper("hint", "logger", getHints);
    CodeMirror.commands.autocomplete = function(cm) {
   ...