code-formatter 1.0.6 → 1.1.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 +4 -4
- data/lib/code_formatter/cli.rb +6 -1
- data/lib/code_formatter/formatters/clang_format_formatter.rb +31 -0
- data/lib/code_formatter/formatters/formatter.rb +66 -1
- data/lib/code_formatter/formatters/swift_format_formatter.rb +7 -54
- data/lib/code_formatter/formatters/swift_lint_formatter.rb +9 -6
- data/lib/code_formatter/resources/clang_format_style.yml +12 -0
- data/lib/code_formatter/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5657be24135ba626de8738ccf7348eb048eee38f937234491bcbdba18a5a24e9
|
4
|
+
data.tar.gz: 52a9238dec5aa5187273f473388f9d7595aee49066ae3bbf2d3743b8a3b4e636
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48bb4d1682ac1fb8f89ef27584347b65f658a9801ed8b6df6464384b22b085fba6483fcd45f44c3f6c4b70880930acc30e3c5d73ab4e9a05dbf85f5efc64a781
|
7
|
+
data.tar.gz: 8ef5f4598e212fb5cc0086440aff0d4ce9f51154317c7412835fd6e62c96d94194e2fc6ae8baf1dbe835de787ea8c01a25a85ade7f14f49f52b1f9896650e395
|
data/lib/code_formatter/cli.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative 'initializer'
|
|
4
4
|
require_relative 'configuration'
|
5
5
|
require_relative 'formatters/swift_format_formatter'
|
6
6
|
require_relative 'formatters/swift_lint_formatter'
|
7
|
+
require_relative 'formatters/clang_format_formatter'
|
7
8
|
require 'thor'
|
8
9
|
|
9
10
|
module CodeFormatter
|
@@ -21,7 +22,11 @@ module CodeFormatter
|
|
21
22
|
config = Configuration.load_from(options[:config])
|
22
23
|
force_all = options[:force_all]
|
23
24
|
path = options[:path]
|
24
|
-
formatters = [
|
25
|
+
formatters = [
|
26
|
+
SwiftFormatFormatter.new(config, path),
|
27
|
+
SwiftLintFormatter.new(config, path),
|
28
|
+
ClangFormatFormatter.new(config, path)
|
29
|
+
]
|
25
30
|
formatters.each { |f| f&.format(force_all) }
|
26
31
|
end
|
27
32
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'formatter'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
module CodeFormatter
|
7
|
+
class ClangFormatFormatter < Formatter
|
8
|
+
def format_files(files)
|
9
|
+
`clang-format -i -style="#{style_dump}" #{files.join(' ')}`
|
10
|
+
end
|
11
|
+
|
12
|
+
def shell_command
|
13
|
+
'clang-format'
|
14
|
+
end
|
15
|
+
|
16
|
+
def files_filter
|
17
|
+
"'*.h' '*.m' '*.mm' '*.c' '*.cpp'"
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def style_dump
|
23
|
+
style_yaml.to_s.gsub('=>', ' : ')
|
24
|
+
end
|
25
|
+
|
26
|
+
def style_yaml
|
27
|
+
file = File.expand_path('../../resources/clang_format_style.yml', __FILE__)
|
28
|
+
YAML.load_file(file)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -14,8 +14,73 @@ module CodeFormatter
|
|
14
14
|
@path = path
|
15
15
|
end
|
16
16
|
|
17
|
-
def format(
|
17
|
+
def format(force_all = false)
|
18
|
+
return unless commands_exist?
|
19
|
+
|
20
|
+
files = files_to_format(force_all)
|
21
|
+
if files.empty?
|
22
|
+
puts "[#{shell_command}]: everything is up-to-date"
|
23
|
+
else
|
24
|
+
puts "[#{shell_command}]: going to format files:\n#{files.join('\n')}"
|
25
|
+
format_files(files)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def format_files(*)
|
18
30
|
raise NotImplementedError
|
19
31
|
end
|
32
|
+
|
33
|
+
def shell_command
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
|
37
|
+
def files_filter
|
38
|
+
raise NotImplementedError
|
39
|
+
end
|
40
|
+
|
41
|
+
def commands_exist?
|
42
|
+
unless Environment.exist? 'git'
|
43
|
+
warn 'warning: failed to find git command'
|
44
|
+
return false
|
45
|
+
end
|
46
|
+
|
47
|
+
unless Environment.exist? shell_command
|
48
|
+
warn "warning: [#{shell_command}] not found (to install it run 'brew install #{shell_command}')"
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
|
52
|
+
true
|
53
|
+
end
|
54
|
+
|
55
|
+
def files_to_format(force_all)
|
56
|
+
files = force_all ? all_files : modified_and_staged_files
|
57
|
+
files.lines.uniq.map { |f| File.expand_path f.strip }.select { |f| format_file? f }
|
58
|
+
end
|
59
|
+
|
60
|
+
def all_files
|
61
|
+
`git ls-files -- #{files_filter}`
|
62
|
+
end
|
63
|
+
|
64
|
+
def modified_and_staged_files
|
65
|
+
modified_and_untracked = `git ls-files --others --exclude-standard -m -- #{files_filter}`
|
66
|
+
staged = `git diff --cached --name-only -- #{files_filter}`
|
67
|
+
modified_and_untracked + staged
|
68
|
+
end
|
69
|
+
|
70
|
+
def format_file?(file)
|
71
|
+
return false unless File.file?(file) && File.exist?(file)
|
72
|
+
return false if excluded_file?(file)
|
73
|
+
included_file?(file)
|
74
|
+
end
|
75
|
+
|
76
|
+
def included_file?(file)
|
77
|
+
included_files = config.included_files.map { |f| File.expand_path(f, path) }
|
78
|
+
included_files.any? { |f| file.start_with?(f) }
|
79
|
+
end
|
80
|
+
|
81
|
+
def excluded_file?(file)
|
82
|
+
excluded_files = config.excluded_files.map { |f| File.expand_path(f, path) }
|
83
|
+
excluded_files.any? { |f| file.start_with?(f) }
|
84
|
+
end
|
20
85
|
end
|
21
86
|
end
|
@@ -5,68 +5,21 @@ require 'yaml'
|
|
5
5
|
|
6
6
|
module CodeFormatter
|
7
7
|
class SwiftFormatFormatter < Formatter
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
unless Environment.exist? 'swiftformat'
|
15
|
-
warn "warning: [swiftformat] not found (to install it run 'brew install swiftformat')"
|
16
|
-
return
|
17
|
-
end
|
18
|
-
|
19
|
-
files = files_to_format(force_all)
|
20
|
-
if files.empty?
|
21
|
-
puts '[swiftformat]: everything is up-to-date'
|
22
|
-
else
|
23
|
-
puts "[swiftformat]: going to format files:\n#{files.join('\n')}"
|
24
|
-
format_files(files)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def files_to_format(force_all)
|
31
|
-
files = force_all ? all_files : modified_and_staged_files
|
32
|
-
files.lines.uniq.map { |f| File.expand_path f.strip }.select { |f| format_file? f }
|
33
|
-
end
|
34
|
-
|
35
|
-
def all_files
|
36
|
-
`git ls-files -- #{files_filter}`
|
8
|
+
def format_files(files)
|
9
|
+
disabled = disabled_rules.join(',')
|
10
|
+
enabled = enabled_rules.join(',')
|
11
|
+
`swiftformat #{files.join(' ')} --disable #{disabled} --enable #{enabled}`
|
37
12
|
end
|
38
13
|
|
39
|
-
def
|
40
|
-
|
41
|
-
staged = `git diff --cached --name-only -- #{files_filter}`
|
42
|
-
modified_and_untracked + staged
|
14
|
+
def shell_command
|
15
|
+
'swiftformat'
|
43
16
|
end
|
44
17
|
|
45
18
|
def files_filter
|
46
19
|
"'*.swift'"
|
47
20
|
end
|
48
21
|
|
49
|
-
|
50
|
-
return false unless File.file?(file) && File.exist?(file)
|
51
|
-
return false if excluded_file?(file)
|
52
|
-
included_file?(file)
|
53
|
-
end
|
54
|
-
|
55
|
-
def included_file?(file)
|
56
|
-
included_files = config.included_files.map { |f| File.expand_path(f, path) }
|
57
|
-
included_files.any? { |f| file.start_with?(f) }
|
58
|
-
end
|
59
|
-
|
60
|
-
def excluded_file?(file)
|
61
|
-
excluded_files = config.excluded_files.map { |f| File.expand_path(f, path) }
|
62
|
-
excluded_files.any? { |f| file.start_with?(f) }
|
63
|
-
end
|
64
|
-
|
65
|
-
def format_files(files)
|
66
|
-
disabled = disabled_rules.join(',')
|
67
|
-
enabled = enabled_rules.join(',')
|
68
|
-
`swiftformat #{files.join(' ')} --disable #{disabled} --enable #{enabled}`
|
69
|
-
end
|
22
|
+
private
|
70
23
|
|
71
24
|
# @return [[String]] enabled rules
|
72
25
|
def enabled_rules
|
@@ -6,18 +6,21 @@ require 'tempfile'
|
|
6
6
|
|
7
7
|
module CodeFormatter
|
8
8
|
class SwiftLintFormatter < Formatter
|
9
|
-
def
|
10
|
-
unless Environment.exist? 'swiftlint'
|
11
|
-
warn "warning: [swiftlint] not found (to install it run 'brew install swiftlint')"
|
12
|
-
return
|
13
|
-
end
|
14
|
-
|
9
|
+
def format_files(_)
|
15
10
|
create_config do |file|
|
16
11
|
system("swiftlint autocorrect --path #{path} --config #{file.path}")
|
17
12
|
system("swiftlint --path #{path} --config #{file.path}")
|
18
13
|
end
|
19
14
|
end
|
20
15
|
|
16
|
+
def shell_command
|
17
|
+
'swiftlint'
|
18
|
+
end
|
19
|
+
|
20
|
+
def files_filter
|
21
|
+
"'*.swift'"
|
22
|
+
end
|
23
|
+
|
21
24
|
private
|
22
25
|
|
23
26
|
def create_config
|
@@ -0,0 +1,12 @@
|
|
1
|
+
BasedOnStyle : WebKit
|
2
|
+
BreakBeforeBraces : Attach
|
3
|
+
BinPackArguments: false
|
4
|
+
BinPackParameters: false
|
5
|
+
AllowAllParametersOfDeclarationOnNextLine: false
|
6
|
+
SpacesInSquareBrackets : false
|
7
|
+
PointerAlignment : Right
|
8
|
+
PenaltyReturnTypeOnItsOwnLine : 300
|
9
|
+
ColumnLimit : 0
|
10
|
+
AllowShortBlocksOnASingleLine: true
|
11
|
+
AlignTrailingComments: true
|
12
|
+
AllowShortFunctionsOnASingleLine: false
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: code-formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sroik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -107,10 +107,12 @@ files:
|
|
107
107
|
- lib/code_formatter/cli.rb
|
108
108
|
- lib/code_formatter/configuration.rb
|
109
109
|
- lib/code_formatter/environment.rb
|
110
|
+
- lib/code_formatter/formatters/clang_format_formatter.rb
|
110
111
|
- lib/code_formatter/formatters/formatter.rb
|
111
112
|
- lib/code_formatter/formatters/swift_format_formatter.rb
|
112
113
|
- lib/code_formatter/formatters/swift_lint_formatter.rb
|
113
114
|
- lib/code_formatter/initializer.rb
|
115
|
+
- lib/code_formatter/resources/clang_format_style.yml
|
114
116
|
- lib/code_formatter/resources/sample_config.config
|
115
117
|
- lib/code_formatter/resources/swiftformat_rules.yml
|
116
118
|
- lib/code_formatter/resources/swiftlint.yml
|