       i++
     return [selectionStart, i]
 
-  showIxRanges: (bufferText, ranges) ->
-    console.log 'showIxRanges:'
+  ###*
+   * @param  {string} bufferText
+   * @param  {number[][]} ranges
+  ###
+  logIxRanges: (bufferText, ranges) ->
+    console.log 'logIxRanges:'
     for ixRange in ranges
       console.log 'ixRange: ['+ ixRange[0] + ',' + ixRange[1] + '>:  >>' + bufferText.substr(ixRange[0], ixRange[1] - ixRange[0]) + '<<'
 
-  # Convert index-based range array [start, end] to row/column-based Range
+  ###*
+   * Convert index-based range array [startIx, endIx] to row/column-based Range.
+   * @param  {string}   textBuffer
+   * @param  {number[]} ixRange    - Index range: [startIx, endIx]
+   * @return {Range} Row/column based Range
+  ###
   getRangeForIxRange: (textBuffer, ixRange) ->
     new Range (textBuffer.positionForCharacterIndex ixRange[0]),
               (textBuffer.positionForCharacterIndex ixRange[1])
 
-  # Convert row/column-based Range to index-based range array [start, end]
+  ###*
+   * Convert row/column-based Range to index-based range array [startIx, endIx]
+   * @param  {string}   textBuffer
+   * @param  {number[]} ixRange    - Row/column based Range
+   * @return {Range} Index range: [startIx, endIx]
+  ###
   getIxRangeForRange: (textBuffer, range) ->
     [ (textBuffer.characterIndexForPosition range.start)
     , (textBuffer.characterIndexForPosition range.end) ]
 
 
+  # TODO: Create a datastructure for these so we can take them from config.cson
+  # TODO: Not exactly sure if JSdoc's verbose syntax actually makes things clearer here..
+  ###*
+   * @constant {String}
+  ###
   separatorChars: ';,'
 
-  # TODO: create a datastructure for these so we can take them from config.cson
+  ###*
+   * @constant {String}
+  ###
   openBracketChars:  '[{('
+  ###*
+   * @constant {String}
+  ###
   closeBracketChars: ']})'
+  ###*
+   * @constant {String}
+  ###
   defaultSepChars:   ',;,'
 
-  # assumes c is character
+  ###*
+   * PRECONDITION: c is a 1-character string.
+   * @param  {string} c
+   * @return {boolean}
+  ###
   isSeparator: (c) ->
     @separatorChars.indexOf(c) != -1
     # ':' is sometimes a separator, but allowing it breaks list-edit for JSON objects

        @pushRange ranges, rangeStart, beforeSkipIx, isNested
        rangeStart = ix

    return null # list not well formed, or no list)

  pushRange: (ranges, rangeStart, rangeEnd, isNested) ->
    ranges.push [rangeStart,rangeEnd] if not isNested && rangeStart != rangeEnd

  findMatchingOpeningBracket: (bufferText, ignoreRanges, startIx, isNested, closingBracket) ->
    # console.log "findMatchingclosingBracket: " + startIx + ' ' + (if closingBracket? then closingBracket else "any closing bracket")
    ranges = []

      atom.notifications.addFatalError 'List-edit: Unknown opening bracket \'' + openingBracket + '\''
      undefined

  ###*
   * PRECONDITION: closingBracket is a 1-character string.
   * @param  {string} closingBracket
   * @return {string}
  ###
  getOpeningBracketFor: (closingBracket) ->
    ix = @closeBracketChars.indexOf(closingBracket)
    if ix >= 0
