Code Monkey home page Code Monkey logo

code-cleaner's Introduction

About

Remove trailing whitespace, append missing \n and replace tabs by two spaces.

Usage

# edit script.rb and all Ruby scripts in lib directory
code-cleaner script.rb lib

# normalize standard input and print output to standard output
cat script.rb | code-cleaner

# add encoding declaration if missing
code-cleaner --encoding=utf-8

Blacklisting & Whitelisting

Of course you don’t want to remove spaces from other files like PDF documents, images etc. You don’t even want to remove spaces from all Ruby scripts, you probably want to ignore vendored files and locally installed gems. And this is where blacklisting and whitelisting comes handy.

Default behaviour is to ignore everything from vendor and gems directories and from other directories just files ending with .rb, .rake, .task and .thor are normalized.

You can change this behaviour by setting environment variables BLACKLIST and WHITELIST. What you pass to these variables will be treated as a regular expression. The default behaviour respond to BLACKLIST='/(vendor|gems)/' and WHITELIST='(^bin/[^/]+|Rakefile|Thorfile|Gemfile$)|(^.+\.(rb|rake|nake|thor|task|gemspec)$)'. Here’s an example how you can use it:

WHITELIST=''^(Rakefile|Thorfile|Gemfile|.+\.(rb|rake|nake|thor|task|gemspec))$'' BLACKLIST='/(vendor|gems)/' code-cleaner .

Note that these rules aren’t applied for explicit arguments, so if you run code-cleaner README.textile, your readme actually will be normalized. It’s because blacklisting and whitelisting rules are applied just on directories, so if you run code-cleaner ., your readme will stay untouched. Because of this reason code-cleaner . and code-cleaner * will be different.

If you want to force blacklisting resp. whitelisting even for explicitly specified files, use --apply-rules switch. If you want just try it, use --try-apply-rules which will tell you which files will be skipped and exit without any editing. If some files left in ARGV, the exit status will be 0, otherwise it will be 1.

In your Ruby projects, you might add all files in your bin and script directories into whitelist: WHITELIST='(^bin/[^/]+|Rakefile|Thorfile|Gemfile$)|(^.+\.(rb|rake|nake|thor|task|gemspec)$)'

Exit statuses

If code-cleaner does any changes, the exit status will be 0, otherwise it will be 10. It means you can use it in commands like:

if code-cleaner "$file" --apply-rules; then # code-cleaner exits with 0 if some changes were made
  git add "$file" # so the changes will be committed immediately
fi

Or, better and more safe way is to directly check exit status of last command via $? as is used in the default pre-commit hook:

code-cleaner .

if [ $? -eq 10 ]; then
  echo Any modifications were made
else
  echo File was changed
fi

Pre-commit hook

The best way how you can ensure your sources are clean is to use pre-commit hook, if your SCM provides this function. Plus, if you are using git, just use load "code-cleaner.rake" in your Rakefile and then run rake hooks:whitespace:install. There are also alternatives for Nake (code-cleaner.nake) and Thor (code-cleaner.thor). Second way is to use rake --rakefile /path/to/code-cleaner/tasks/code-cleaner.rake hooks:whitespace:install resp. nake /path/to/code-cleaner/tasks/code-cleaner.nake hooks:whitespace:install directly.

It might force you to remove your .git/hooks/pre-commit if this file exist. If you haven’t done any editation in this file, it’s safe to do so and if you done some, then you will need to merge your changes manually. You can do it manually, or, if you are using Nake or Thor, just use --force option.

Here’s an example how you can integrate code-cleaner to your tasks:

begin
  load "code-cleaner.nake"
rescue LoadError
  warn "If you want to contribute to nake, you have to install code-cleaner gem and then run ./tasks.rb hooks:whitespace:install"
end

Also, if you project run in bundled environment, make sure you have your bin or script directory in your $PATH or change the pre-commit hook to point to the right path to the code-cleaner. If you are using Nake or Thor, just specify --path=bin resp. --path=script as an option for the hooks:whitespace:install If you are using Rake, you will have to do it manually.

—encoding=utf-8
—whitelist=pattern & —blacklist=pattern

Nake::Task["hooks:whitespace:install"].tap do |task|
  task.config[:path] = "bin"
  task.config[:encoding] = "utf-8"
  task.config[:whitelist] = '(^bin/[^/]+|Rakefile|Thorfile|Gemfile$)|(^.+\.(rb|rake|nake|thor|task|gemspec)$)'
  #task.config[:blacklist]
end

code-cleaner's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.