pronto-clang_format 0.1.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9fe7b8b5605c1b8f0412b956371ecad612216fcdaf2cddb8ea68c9436f346db3
4
- data.tar.gz: 6b2e07eef94cf67d213d1cdeccd103d9eb4aabb9cd458138af1cee08a5cce3f4
3
+ metadata.gz: 49f3c645df42fafe96470903b922f1f9cbaf902183cdea14649a0c00ddd48999
4
+ data.tar.gz: 986aadc6c598c278c0c31102092b96d4b68002ade949fef885836be9e4f9fd4d
5
5
  SHA512:
6
- metadata.gz: a16d084a2da8626789f91b5691cc6236c2742afc51a67923a7989f341eb9344728a89cb08c7d010ad24627709d6209d7018d71f1b4fced8ac514f208b808ca12
7
- data.tar.gz: ce6ef55cc378d4ffac01d9c2716c005729b38d03b7d1ddbb4ed13fa43bb0e962760302cc19ec503d8abf54aeea6b7d54f991a37b16295bf179e6cfecf42c33de
6
+ metadata.gz: 59cc1f84ddaea0c4d4238af82912853c3b96adfe94f5e8b198edacfb63546d47a1241c1fdb5994597aad82930559ec34bd8d9dc5de5b5f3f7a8870674545a21a
7
+ data.tar.gz: 52fa9526d57234ee6ed2a146360c2bc2d7ce2a759064cd6718ea7713446391aa6fd6eee8825bf0d770ef27226ce127966050082e50b85aadc35eff3b3ac39600
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1
5
+ - 2.2
6
+ - 2.3.0
7
+ - 2.4.0
data/README.md CHANGED
@@ -1,3 +1,44 @@
1
- WIP
1
+ # Pronto runner for clang-format
2
2
 
3
- A pronto runner for clang-format.
3
+ [![Code Climate](https://codeclimate.com/github/micjabbour/pronto-clang_format.png)](https://codeclimate.com/github/micjabbour/pronto-clang_format)
4
+ [![Build Status](https://travis-ci.org/micjabbour/pronto-clang_format.png)](https://travis-ci.org/micjabbour/pronto-clang_format)
5
+ [![Gem Version](https://badge.fury.io/rb/pronto-clang_format.png)](http://badge.fury.io/rb/pronto-clang_format)
6
+ [![Dependency Status](https://gemnasium.com/micjabbour/pronto-clang_format.png)](https://gemnasium.com/micjabbour/pronto-clang_format)
7
+
8
+ Pronto runner for [clang-format](https://clang.llvm.org/docs/ClangFormat.html), a tool to reformat C/C++/Java/JavaScript/Objective-C/Protobuf code according to configurable style guidelines. [What is Pronto?](https://github.com/prontolabs/pronto)
9
+
10
+ As an example, this can be used to run clang-format and submit replacements to web-based git repo managers (e.g. github, gitlab, ...) as comments using Pronto.
11
+
12
+ ## Installation:
13
+
14
+ First, the following prerequisites need to be installed:
15
+
16
+ 1. clang-format
17
+ 2. Ruby
18
+ 3. Pronto, this can be done after installing Ruby using:
19
+ ```
20
+ gem install pronto
21
+ ```
22
+ After that, pronto-clang_format can be installed using:
23
+ ```
24
+ gem install pronto-clang_format
25
+ ```
26
+ Pronto will detect and run clang-format as soon as this runner is installed.
27
+
28
+ ## Configuration:
29
+
30
+ The runner can be configured by setting some environment variables before invoking it. The following table lists these environment
31
+ variables along with a description for each one of them:
32
+
33
+ | Environment variable | Description |
34
+ |:-------------------------------|:------------------------------------------------------------------------------------------------------|
35
+ | `PRONTO_CLANG_FORMAT_PATH` | Path to the clang-format executable that should be run by the runner. This defaults to `clang-format` |
36
+ | `PRONTO_CLANG_FORMAT_STYLE` | A string that is passed to clang-format's `--style=` option. This defaults to `file` |
37
+ | `PRONTO_CLANG_FORMAT_FILE_EXTS`| A comma separated list of file extensions to examine. This defaults to `c, h, cpp, cc, cxx, c++, hh, hxx, hpp, h++, icc, inl, tcc, tpp, ipp`|
38
+
39
+
40
+ ## Known limitations:
41
+ * Every replacement reported by clang-format is mapped to no more than one offence, even though the reported replacement might be fixing more than one offence (e.g. trailing whitespace in a line and improper indentation in the following line)
42
+ * Only one offence is reported per line; to avoid overwhelming one line with too many offences
43
+ * Categorizers are rudimentary, but more can be added easily to the current chain
44
+ * This runner is mostly meant to remind the developer to run clang-format on his changed files. It is not about going through the offences one by one and fixing them manually
data/Rakefile CHANGED
@@ -1,2 +1,6 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
2
6
  task default: :spec
@@ -1,12 +1,16 @@
1
1
  module Pronto
2
2
  module ClangFormat
3
3
  module OffenceCategorizer
4
- # base class to implement a chain of responsibility
4
+ # base class to implement a chain of categorizers
5
5
  class AbstractCategorizer
6
6
  def initialize(successor = nil)
7
7
  @successor = successor
8
8
  end
9
9
 
10
+ # Tries to handle the offence using the current categorizer. If it
11
+ # couldn't, it passes the offence to the next categorizer in the chain.
12
+ # If this is the last categorizer in the chain, it returns a generic
13
+ # message
10
14
  def handle(offence)
11
15
  current_result = handle_current offence
12
16
  if !current_result.nil?
@@ -14,8 +18,8 @@ module Pronto
14
18
  elsif !@successor.nil?
15
19
  @successor.handle offence
16
20
  else # unahndled offence
17
- "This should be rewritten as: \n```" \
18
- "#{offence.affected_lines_after}```"
21
+ "Improper formatting. This should be rewritten as: \n" \
22
+ "```#{offence.affected_lines_after}```"
19
23
  end
20
24
  end
21
25
 
@@ -1,12 +1,14 @@
1
- require_relative 'indentation_categorizer'
2
- require_relative 'includes_order_categorizer'
1
+ # require all ruby files in the current directory (all categorizers)
2
+ Dir[File.join(__dir__, '*.rb')].each { |file| require file }
3
3
 
4
4
  module Pronto
5
5
  module ClangFormat
6
6
  module OffenceCategorizer
7
7
  class Factory
8
8
  def self.create_categorizers
9
- IncludesOrderCategorizer.new IndentationCategorizer.new
9
+ IncludesOrderCategorizer.new UsingOrderCategorizer.new \
10
+ UnnecessaryNewlineCategorizer.new IndentationCategorizer.new \
11
+ MissingNewlineCategorizer.new TrailingWhitespaceCategorizer.new
10
12
  end
11
13
  end
12
14
  end
@@ -8,8 +8,8 @@ module Pronto
8
8
  return unless offence.replaced_text.include? 'include'
9
9
 
10
10
  "Include statements are not ordered alphabetically. "\
11
- "They should be rewritten as:\n```" \
12
- "#{offence.affected_lines_after}```"
11
+ "They should be rewritten as:\n" \
12
+ "```#{offence.affected_lines_after}```"
13
13
  end
14
14
  end
15
15
  end
@@ -5,7 +5,9 @@ module Pronto
5
5
  module OffenceCategorizer
6
6
  class IndentationCategorizer < AbstractCategorizer
7
7
  def handle_current(offence)
8
- "Incorrect indentation" if offence.column <= 1
8
+ return unless offence.column == 1
9
+
10
+ "Incorrect indentation"
9
11
  end
10
12
  end
11
13
  end
@@ -0,0 +1,17 @@
1
+ require_relative 'abstract_categorizer'
2
+
3
+ module Pronto
4
+ module ClangFormat
5
+ module OffenceCategorizer
6
+ class MissingNewlineCategorizer < AbstractCategorizer
7
+ def handle_current(offence)
8
+ return unless offence.replaced_text.count("\n") \
9
+ < offence.replacement.count("\n")
10
+
11
+ "Missing newline. This should be rewritten as:\n" \
12
+ "```#{offence.affected_lines_after}```"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'abstract_categorizer'
2
+
3
+ module Pronto
4
+ module ClangFormat
5
+ module OffenceCategorizer
6
+ class TrailingWhitespaceCategorizer < AbstractCategorizer
7
+ def handle_current(offence)
8
+ return unless /[[:blank:]]+[\n]/.match(offence.replaced_text)
9
+
10
+ "Remove trailing whitespace"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'abstract_categorizer'
2
+
3
+ module Pronto
4
+ module ClangFormat
5
+ module OffenceCategorizer
6
+ class UnnecessaryNewlineCategorizer < AbstractCategorizer
7
+ def handle_current(offence)
8
+ return unless offence.column == 0
9
+
10
+ "Unnecessary new line"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'abstract_categorizer'
2
+
3
+ module Pronto
4
+ module ClangFormat
5
+ module OffenceCategorizer
6
+ class UsingOrderCategorizer < AbstractCategorizer
7
+ def handle_current(offence)
8
+ return unless offence.replaced_text.include? 'using'
9
+
10
+ "Using declarations not ordered alphabetically"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  module Pronto
2
2
  module ClangFormat
3
- VERSION = '0.1.3'.freeze
3
+ VERSION = '0.9.0'.freeze
4
4
  end
5
5
  end
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'pronto', '~> 0.9.0'
26
26
  spec.add_development_dependency 'bundler', '~> 1.16'
27
27
  spec.add_development_dependency 'rake', '~> 10.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.4'
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pronto-clang_format
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Jabbour
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-07 00:00:00.000000000 Z
11
+ date: 2018-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pronto
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.4'
55
69
  description:
56
70
  email:
57
71
  - micjabbour@gmail.com
@@ -62,6 +76,7 @@ extra_rdoc_files:
62
76
  - README.md
63
77
  files:
64
78
  - ".gitignore"
79
+ - ".travis.yml"
65
80
  - Gemfile
66
81
  - LICENSE.txt
67
82
  - README.md
@@ -72,6 +87,10 @@ files:
72
87
  - lib/pronto/clang_format/offence_categorizer/factory.rb
73
88
  - lib/pronto/clang_format/offence_categorizer/includes_order_categorizer.rb
74
89
  - lib/pronto/clang_format/offence_categorizer/indentation_categorizer.rb
90
+ - lib/pronto/clang_format/offence_categorizer/missing_newline_categorizer.rb
91
+ - lib/pronto/clang_format/offence_categorizer/trailing_whitespace_categorizer.rb
92
+ - lib/pronto/clang_format/offence_categorizer/unnecessary_newline_categorizer.rb
93
+ - lib/pronto/clang_format/offence_categorizer/using_order_categorizer.rb
75
94
  - lib/pronto/clang_format/version.rb
76
95
  - lib/pronto/clang_format/wrapper.rb
77
96
  - lib/pronto/clang_format_runner.rb