├── README ├── bin └── whitespace └── whitespace.gemspec /README: -------------------------------------------------------------------------------- 1 | # whitespace 2 | 3 | Strips whitespace in files modified by git. 4 | 5 | ## USAGE 6 | 7 | Run it: 8 | 9 | $ whitespace 10 | 11 | You can also use it to strip whitespace from all files: 12 | 13 | $ whitespace --all 14 | 15 | That's pretty much it. 16 | 17 | (c) Copyright 2011 Pat Nakajima. All Rights Reserved. -------------------------------------------------------------------------------- /bin/whitespace: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # script/whitespace 4 | # 5 | # Strips whitespace from any files modified in git 6 | # Also: 7 | # - converts tabs to spaces 8 | # - ensures a single newline at the end 9 | FILE_TYPES = "rb|js|haml|html|css|sass|erb|coffee|m|h" 10 | 11 | class WhitespaceProcessor 12 | def self.process(code) 13 | result = [] 14 | code.each_line do |line| 15 | line.gsub!(/(\s+)$/, "\n") 16 | line.gsub!(/\t/, ' ') 17 | result << line 18 | end 19 | 20 | while result.last =~ /^$/ 21 | result.pop 22 | end 23 | 24 | unless result.last =~ /\n$/ 25 | result << "\n" 26 | end 27 | 28 | code = result.join 29 | code.gsub!(/\A\n*/, '') 30 | code 31 | end 32 | end 33 | 34 | regex = "(#{FILE_TYPES})" 35 | 36 | if ARGV.include?('--all') 37 | files = `find . -type file | grep -v .git | grep -v ./vendor | grep -v ./tmp | egrep "#{regex}"`.split(/\n/) 38 | puts "* Stripping whitespace from all project files" 39 | else 40 | files = `git status`.split("\n").select { |file| file =~ /^#?\t(modified|new file|renamed):/ } 41 | puts "* Stripping whitespace from modified files." 42 | end 43 | 44 | files.each do |line| 45 | line = line.split(":").last.strip 46 | next unless line =~ Regexp.new(regex) 47 | puts " processing #{line}..." 48 | code = File.read(line) 49 | File.open(line, 'w+') { |f| f << (WhitespaceProcessor.process(code)) } 50 | end 51 | puts "* DONE" 52 | -------------------------------------------------------------------------------- /whitespace.gemspec: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | 3 | Gem::Specification.new do |s| 4 | s.name = %q{whitespace} 5 | s.version = "2.0.3" 6 | 7 | s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= 8 | s.authors = ["Pat Nakajima"] 9 | s.date = %q{2011-01-19} 10 | s.email = %q{patnakajima@gmail.com} 11 | s.executables = ["whitespace"] 12 | s.files = ["README", "bin/whitespace"] 13 | s.homepage = %q{https://github.com/nakajima/whitespace} 14 | s.require_paths = ["lib"] 15 | s.rubygems_version = %q{1.4.1} 16 | s.summary = %q{Strips whitespace from files modified by git} 17 | 18 | if s.respond_to? :specification_version then 19 | s.specification_version = 3 20 | 21 | if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then 22 | else 23 | end 24 | else 25 | end 26 | end 27 | --------------------------------------------------------------------------------