erb-formatter 0.4.3 → 0.5.1
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/README.md +19 -4
- data/lib/erb/formatter/command_line.rb +6 -2
- data/lib/erb/formatter/version.rb +1 -1
- data/lib/erb/formatter.rb +40 -18
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9746e0224608b37531674e86d589b087a67875791440318536b7d55ec66c8548
|
4
|
+
data.tar.gz: 73b0639da80cba0761eb5b6a58270b32db5b146cca710b446ebae61737bba385
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2658816da104a74d23952c1f59c70726c27668763ed94332914112fcd04e76c61ab95e738fea856c44e1f0bd72d0dae61d8ee7c6ec38d28abd927e91b970e56
|
7
|
+
data.tar.gz: 57a63692f5f533077df12677bbdf1dfa414ac564f897621d58fa08607e707d1af02fa9a78d7b0493e9340b27f046b2abee779758a0a6c8239e135abe3811da8b
|
data/README.md
CHANGED
@@ -33,13 +33,18 @@ Or install it yourself as:
|
|
33
33
|
|
34
34
|
## Usage
|
35
35
|
|
36
|
+
### From [Visual Studio Code](https://code.visualstudio.com)
|
37
|
+
|
38
|
+
Just install the [Ruby ERB::Formatter 🪜](https://marketplace.visualstudio.com/items?itemName=elia.erb-formatter) extension
|
39
|
+
and follow the setup instructions there.
|
40
|
+
|
36
41
|
### From the command line
|
37
42
|
|
38
43
|
Update files in-place:
|
39
44
|
|
40
45
|
$ erb-format app/views/**/*.html.erb --write
|
41
46
|
|
42
|
-
or use stdin/stdout (useful for editor integrations):
|
47
|
+
or use stdin/stdout (useful for editor integrations):
|
43
48
|
|
44
49
|
$ echo "<div > asdf <% if 123%> <%='foobar'%> <%end-%> </div>" | erb-format --stdin
|
45
50
|
<div>
|
@@ -51,7 +56,7 @@ or use stdin/stdout (useful for editor integrations):
|
|
51
56
|
|
52
57
|
Check out `erb-format --help` for more options.
|
53
58
|
|
54
|
-
### From Ruby
|
59
|
+
### From [Ruby](https://www.ruby-lang.org/en/)
|
55
60
|
|
56
61
|
```ruby
|
57
62
|
require 'erb/formatter'
|
@@ -76,7 +81,7 @@ ERB
|
|
76
81
|
# </div>
|
77
82
|
```
|
78
83
|
|
79
|
-
### With `lint-staged`
|
84
|
+
### With [`lint-staged`](https://github.com/okonet/lint-staged#readme)
|
80
85
|
|
81
86
|
Add the gem to your gemfile and the following to your `package.json`:
|
82
87
|
|
@@ -87,7 +92,7 @@ Add the gem to your gemfile and the following to your `package.json`:
|
|
87
92
|
}
|
88
93
|
```
|
89
94
|
|
90
|
-
### As a TextMate
|
95
|
+
### As a [TextMate](http://macromates.com) command
|
91
96
|
|
92
97
|
Create a command with the following settings:
|
93
98
|
|
@@ -104,6 +109,16 @@ cd "$TM_PROJECT_DIRECTORY"
|
|
104
109
|
bundle exec erb-format --stdin-filename "$TM_FILEPATH" < /dev/stdin 2> /dev/stdout
|
105
110
|
```
|
106
111
|
|
112
|
+
### With [(Neo)VIM ALE](https://github.com/dense-analysis/ale)
|
113
|
+
|
114
|
+
Enable `erb-formatter` as a fixer in the ALE config:
|
115
|
+
|
116
|
+
```vim
|
117
|
+
let g:ale_fixers = {
|
118
|
+
\ 'eruby': ['erb-formatter'],
|
119
|
+
\}
|
120
|
+
```
|
121
|
+
|
107
122
|
## Development
|
108
123
|
|
109
124
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -10,7 +10,7 @@ class ERB::Formatter::CommandLine
|
|
10
10
|
@argv = argv.dup
|
11
11
|
@stdin = stdin
|
12
12
|
|
13
|
-
@write, @filename, @read_stdin, @code = nil
|
13
|
+
@write, @filename, @read_stdin, @code, @single_class_per_line = nil
|
14
14
|
|
15
15
|
OptionParser.new do |parser|
|
16
16
|
parser.banner = "Usage: #{$0} FILENAME... --write"
|
@@ -37,6 +37,10 @@ class ERB::Formatter::CommandLine
|
|
37
37
|
@width = value
|
38
38
|
end
|
39
39
|
|
40
|
+
parser.on("--single-class-per-line", "Print each class on a separate line") do |value|
|
41
|
+
@single_class_per_line = value
|
42
|
+
end
|
43
|
+
|
40
44
|
parser.on("--[no-]debug", "Enable debug mode") do |value|
|
41
45
|
$DEBUG = value
|
42
46
|
end
|
@@ -77,7 +81,7 @@ class ERB::Formatter::CommandLine
|
|
77
81
|
if ignore_list.should_ignore_file? filename
|
78
82
|
print code unless write
|
79
83
|
else
|
80
|
-
html = ERB::Formatter.new(code, filename: filename, line_width: @width || 80)
|
84
|
+
html = ERB::Formatter.new(code, filename: filename, line_width: @width || 80, single_class_per_line: @single_class_per_line)
|
81
85
|
|
82
86
|
if write
|
83
87
|
File.write(filename, html)
|
data/lib/erb/formatter.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
|
3
3
|
require 'pp'
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require 'securerandom'
|
4
|
+
require 'erb'
|
5
|
+
require 'yaml'
|
7
6
|
require 'strscan'
|
8
7
|
require 'stringio'
|
8
|
+
require 'securerandom'
|
9
9
|
require 'erb/formatter/version'
|
10
10
|
|
11
11
|
require 'syntax_tree'
|
@@ -56,13 +56,6 @@ class ERB::Formatter
|
|
56
56
|
|
57
57
|
RUBOCOP_STDIN_MARKER = "===================="
|
58
58
|
|
59
|
-
# Override the max line length to account from already indented ERB
|
60
|
-
module RubocopForcedMaxLineLength
|
61
|
-
def max
|
62
|
-
Thread.current['RuboCop::Cop::Layout::LineLength#max'] || super
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
59
|
module DebugShovel
|
67
60
|
def <<(string)
|
68
61
|
puts "ADDING: #{string.inspect} FROM:\n #{caller(1, 5).join("\n ")}"
|
@@ -74,13 +67,14 @@ class ERB::Formatter
|
|
74
67
|
new(source, filename: filename).html
|
75
68
|
end
|
76
69
|
|
77
|
-
def initialize(source, line_width: 80, filename: nil, debug: $DEBUG)
|
70
|
+
def initialize(source, line_width: 80, single_class_per_line: false, filename: nil, debug: $DEBUG)
|
78
71
|
@original_source = source
|
79
72
|
@filename = filename || '(erb)'
|
80
73
|
@line_width = line_width
|
81
74
|
@source = remove_front_matter source.dup
|
82
75
|
@html = +""
|
83
76
|
@debug = debug
|
77
|
+
@single_class_per_line = single_class_per_line
|
84
78
|
|
85
79
|
html.extend DebugShovel if @debug
|
86
80
|
|
@@ -104,10 +98,13 @@ class ERB::Formatter
|
|
104
98
|
end
|
105
99
|
|
106
100
|
def remove_front_matter(source)
|
107
|
-
source.
|
108
|
-
|
109
|
-
|
110
|
-
|
101
|
+
return source unless source.start_with?("---\n")
|
102
|
+
|
103
|
+
first_body_line = YAML.parse(source).children.first.end_line + 1
|
104
|
+
lines = source.lines
|
105
|
+
|
106
|
+
@front_matter = lines[0...first_body_line].join
|
107
|
+
lines[first_body_line..].join
|
111
108
|
end
|
112
109
|
|
113
110
|
attr_accessor \
|
@@ -124,23 +121,48 @@ class ERB::Formatter
|
|
124
121
|
|
125
122
|
attr_html = ""
|
126
123
|
tag_stack_push(['attr='], attrs)
|
124
|
+
|
127
125
|
attrs.scan(ATTR).flatten.each do |attr|
|
128
126
|
attr.strip!
|
129
|
-
full_attr = indented(attr)
|
130
127
|
name, value = attr.split('=', 2)
|
131
128
|
|
129
|
+
if value.nil?
|
130
|
+
attr_html << indented("#{name}")
|
131
|
+
next
|
132
|
+
end
|
133
|
+
|
134
|
+
value_parts = value[1...-1].strip.split(/\s+/)
|
135
|
+
|
136
|
+
full_attr = indented("#{name}=#{value[0]}#{value_parts.join(" ")}#{value[-1]}")
|
137
|
+
|
132
138
|
if full_attr.size > line_width && MULTILINE_ATTR_NAMES.include?(name) && attr.match?(QUOTED_ATTR)
|
133
139
|
attr_html << indented("#{name}=#{value[0]}")
|
134
140
|
tag_stack_push('attr"', value)
|
135
|
-
|
136
|
-
|
141
|
+
|
142
|
+
if !@single_class_per_line && name == 'class'
|
143
|
+
line = value_parts.shift
|
144
|
+
value_parts.each do |value_part|
|
145
|
+
if (line.size + value_part.size + 1) <= line_width
|
146
|
+
line << " #{value_part}"
|
147
|
+
else
|
148
|
+
attr_html << indented(line)
|
149
|
+
line = value_part
|
150
|
+
end
|
151
|
+
end
|
152
|
+
attr_html << indented(line) if line
|
153
|
+
else
|
154
|
+
value_parts.each do |value_part|
|
155
|
+
attr_html << indented(value_part)
|
156
|
+
end
|
137
157
|
end
|
158
|
+
|
138
159
|
tag_stack_pop('attr"', value)
|
139
160
|
attr_html << indented(value[-1])
|
140
161
|
else
|
141
162
|
attr_html << full_attr
|
142
163
|
end
|
143
164
|
end
|
165
|
+
|
144
166
|
tag_stack_pop(['attr='], attrs)
|
145
167
|
attr_html << indented("")
|
146
168
|
attr_html
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erb-formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elia Schito
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: syntax_tree
|
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
requirements: []
|
71
|
-
rubygems_version: 3.3.
|
71
|
+
rubygems_version: 3.3.23
|
72
72
|
signing_key:
|
73
73
|
specification_version: 4
|
74
74
|
summary: Format ERB files with speed and precision.
|