summaryrefslogtreecommitdiff
path: root/contrib/sort_includes.rb
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sort_includes.rb')
-rwxr-xr-xcontrib/sort_includes.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/contrib/sort_includes.rb b/contrib/sort_includes.rb
new file mode 100755
index 0000000..c9f7076
--- /dev/null
+++ b/contrib/sort_includes.rb
@@ -0,0 +1,42 @@
+#!/usr/bin/env ruby
+
+def is_include str
+ str.start_with? '#include'
+end
+
+files = ARGV
+if files.empty?
+ default = "src/**/*.[ch]"
+ puts "no arguments passed, defaulting to #{default}"
+ files = Dir[default]
+end
+
+files.each { |path|
+ File.open(path, "r+") do |file|
+ lines = file.readlines
+
+ last = nil
+ grouped = []
+ lines.each do |line|
+ if is_include(line) != last
+ grouped << [line]
+ last = is_include(line)
+ else
+ grouped[-1] << line
+ end
+ end
+
+ grouped.map do |group|
+ group.sort! if is_include group[0]
+ end
+ grouped = grouped.flatten
+
+ next if grouped == lines
+
+ puts path
+ file.truncate(0)
+ file.seek(0)
+ file.write grouped.join
+ end
+}
+