         firstCharIndentation = (@editor.indentationForBufferRow row)
         # convert the matched column position into tab indents
         if @editor.getSoftTabs()
-          tagIndentation = (matchColumn / @editor.getTabLength())
-        else tagIndentation =
-          do () ->
-            hardTabsFound = 0
+          tokenIndentation = (matchColumn / @editor.getTabLength())
+        else tokenIndentation =
+          do (@editor) ->
+            hardTabsFound = charsFound = 0
             for i in [0...matchColumn]
-              hardTabsFound += ((line.substr i, 1) is '\t')
-            hardTabsFound
+              if ((line.substr i, 1) is '\t')
+                hardTabsFound++
+              else
+                charsFound++
+            return hardTabsFound + ( charsFound / @editor.getTabLength() )
 
         if isFirstTokenOfLine
-          firstTagInLineIndentation =  tagIndentation
+          firstTagInLineIndentation =  tokenIndentation
 
         # big switch statement follows for each token. If the line is reformated
         # then we recalculate the new position.

              name: match[2]
              row: row
              firstTagInLineIndentation: firstTagInLineIndentation
              tagIndentation: tagIndentation
              firstCharIndentation: firstCharIndentation
              parentTokenIdx: parentTokenIdx
              termsThisTagsAttributesIdx: null  # ptr to > tag

                  parentTokenIdx? and
                  tokenStack[parentTokenIdx].type is token and
                  tokenStack[parentTokenIdx].row is ( row - 1)
                    tokenIndentation = firstCharIndentation =
                      @eslintIndentOptions.jsxIndent[1] + @getIndentOfPreviousRow row
                    indentRecalc = @indentRow({row: row, blockIndent: firstCharIndentation})
              else if parentTokenIdx?
