     editor.addCursorAtBufferPosition bufferPosition
   return
 
-verifyExists = (fullPath) ->
-  fs ?= require("fs")
-  (if fs.existsSync(fullPath) then fullPath else null)
-
-# Storage for memoized results from find file
-# Should prevent lots of directory traversal &
-# lookups when liniting an entire project
-
-###
-Searches for a file with a specified name starting with
-'dir' and going all the way up either until it finds the file
-or hits the root.
-
-@param {string} name filename to search for (e.g. .jshintrc)
-@param {string} dir directory to start search from (default:
-current working directory)
-@param {boolean} upwards should recurse upwards on failure? (default: true)
-
-@returns {string} normalized filename
-###
-findFile = (name, dir, upwards=true) ->
-  path ?= require("path")
-  dir = dir or process.cwd()
-  filename = path.normalize(path.join(dir, name))
-  return findFileResults[filename] if findFileResults[filename] isnt `undefined`
-  parent = path.resolve(dir, "../")
-  if verifyExists(filename)
-    findFileResults[filename] = filename
-    return filename
-  if dir is parent
-    findFileResults[filename] = null
-    return null
-  if upwards
-    findFile name, parent
-  else
-    return null
-
-###
-Tries to find a configuration file in either project directory
-or in the home directory. Configuration files are named
-'.jsbeautifyrc'.
-
-@param {string} config name of the configuration file
-@param {string} file path to the file to be linted
-@param {boolean} upwards should recurse upwards on failure? (default: true)
-
-@returns {string} a path to the config file
-###
-findConfig = (config, file, upwards=true) ->
-  path ?= require("path")
-  dir = path.dirname(path.resolve(file))
-  envs = getUserHome()
-  home = path.normalize(path.join(envs, config))
-  proj = findFile(config, dir, upwards)
-  return proj if proj
-  return home if verifyExists(home)
-  null
-getConfigOptionsFromSettings = (langs) ->
-  config = atom.config.get('atom-beautify')
-  options = {}
-  # console.log(langs, config);
-  # Iterate over keys of the settings
-  _.every _.keys(config), (k) ->
-    # Check if keys start with a language
-    p = k.split("_")[0]
-    idx = _.indexOf(langs, p)
-    # console.log(k, p, idx);
-    if idx >= 0
-      # Remove the language prefix and nest in options
-      lang = langs[idx]
-      opt = k.replace(new RegExp("^" + lang + "_"), "")
-      options[lang] = options[lang] or {}
-      options[lang][opt] = config[k]
-      # console.log(lang, opt);
-    true
-  # console.log(options);
-  options
-
 beautify = ({onSave})->
   path ?= require("path")
   MessagePanelView ?= require('atom-message-panel').MessagePanelView


  # Get current editor
  editor = atom.workspace.getActiveEditor()
  # Get current Atom editor configuration
  isSelection = !!editor.getSelectedText()
  softTabs = editor.softTabs
  tabLength = editor.getTabLength()
  editorOptions =
    indent_size: (if softTabs then tabLength else 1)
    indent_char: (if softTabs then " " else "\t")
    indent_with_tabs: not softTabs
  configOptions = getConfigOptionsFromSettings(languages)

  # Get editor path and configurations for paths
  editedFilePath = editor.getPath()

  # Get configuration in User's Home directory
  userHome = getUserHome()
  # FAKEFILENAME forces `path` to treat as file path and it's parent directory
  # is the userHome. See implementation of findConfig
  # and how path.dirname(DIRECTORY) returns the parent directory of DIRECTORY
  homeOptions = getConfig(path.join(userHome,"FAKEFILENAME"), false)

  if editedFilePath?
    # Handle EditorConfig options
    # http://editorconfig.org/
    editorconfig ?= require('editorconfig');
    editorConfigOptions = editorconfig.parse(editedFilePath);
    # Transform EditorConfig to Atom Beautify's config structure and naming
    if editorConfigOptions.indent_style is 'space'
      editorConfigOptions.indent_char = " "
      # if (editorConfigOptions.indent_size)
      #   editorConfigOptions.indent_size = config.indent_size
    else if editorConfigOptions.indent_style is 'tab'
      editorConfigOptions.indent_char = "\t"
      editorConfigOptions.indent_with_tabs = true
      if (editorConfigOptions.tab_width)
          editorConfigOptions.indent_size = editorConfigOptions.tab_width

    # Get all options in configuration files from this directory upwards to root
    projectOptions = []
    p = path.dirname(editedFilePath)
    # Check if p is root (top directory)
    while p isnt path.resolve(p,"../")
      # Get config for p
      pf = path.join(p, "FAKEFILENAME")
      pc = getConfig(pf, false)
      # Add config for p to project's config options
      projectOptions.push(pc)
      # console.log p, pc
      # Move upwards
      p = path.resolve(p,"../")
  else
    editorConfigOptions = {}
    projectOptions = []

  # Combine all options together
  allOptions = [
    editorOptions
    configOptions
    homeOptions
    editorConfigOptions
  ]
  allOptions = allOptions.concat(projectOptions)

  # Get current editor's text
  text = undefined

          message: e.message,
          className: 'text-error'
        }))

  # Get the path to the config file
  # All of the options
  # Listed in order from default (base) to the one with the highest priority
