Clone of EditorConfig core written in Ruby
Ruby
Latest commit 23f4c62 Aug 16, 2016 @treyhunner treyhunner committed on GitHub Merge pull request #3 from stephengroat/add-badge
Add Travis Badge
Permalink
Failed to load latest commit information.
bin Support multiple CLI files May 17, 2015
lib EditorConfig 0.2.2 Sep 10, 2015
test Limit section names to 4096 Jun 4, 2015
.gitignore Ignore Gemfile.lock May 14, 2015
.gitmodules Add core-test submodule May 12, 2015
.travis.yml Add travis config May 14, 2015
Gemfile Add Gemfile May 14, 2015
LICENSE.md Add LICENSE May 12, 2015
README.md Update README.md Aug 12, 2016
Rakefile Fix remaining specs May 18, 2015
editorconfig.gemspec Don't release bin Sep 10, 2015

README.md

EditorConfig Ruby Core

Build Status

EditorConfig Ruby Core provides the same functionality as the EditorConfig C Core and EditorConfig Python Core libraries.

EditorConfig Project

EditorConfig makes it easy to maintain the correct coding style when switching between different text editors and between different projects. The EditorConfig project maintains a file format and plugins for various text editors which allow this file format to be read and used by those editors. For information on the file format and supported text editors, see the EditorConfig website.

Installation

With RubyGems:

$ gem install editorconfig

Usage

Loading library module.

require 'editor_config'
EditorConfig.parse(File.read(".editorconfig"))

A command line binary is also provided.

$ editorconfig main.c
charset=utf-8
insert_final_newline=true
end_of_line=lf
tab_width=8

Load

File System

An flattened config can be loaded from the file system with:

filename = "~/Project/foo/lib/foo.rb"
config = EditorConfig.load_file(filename)

# config: hash of properties and values
{
  "charset" => "utf-8",
  "indent_style" => "space",
  "end_of_line" => "lf",
  "insert_final_newline" => "true"
}

This API walks up the directory hierarchy gathering all .editorconfig files until it reaches a config that defines root = true.

Custom Loader

A custom loader can be provided to read files from another source rather than the file system.

For an example, you might load files directly from a git repository.

tree_sha, filename = "348b1ea52f897f313d62c56c2ba785a41f654861", "lib/foo.rb"

config = EditorConfig.load(filename) do |config_path|
  if blob_sha = `git ls-tree #{tree_sha} #{config_path}`.split(" ")[2]
    `git cat-file blob #{blob_sha}`
  end
end

Parse

A low-level API for parsing an individual .editorconfig file.

A [config, root] tuple is returned. The root bit is set if a top-level root = true is seen. The config value is a two dimensional hash mapping section names to property names and values.

data = File.read(".editorconfig")
config, root = EditorConfig.parse(data)

# root: if top-most root = true flag is set
true

# config: hash of sections and properties
{
  "*" => {
    "end_of_line" => "lf",
    "insert_final_newline" => "true"
  },
  "*.{js,py}" => {
    "charset" => "utf-8"
  }
}

Testing

Cmake is required to run the test suite. On OSX, just brew install cmake.

Then run the tests with:

$ rake test