hamlit 2.13.0-java → 2.13.1-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 167551d8ba270e6630258045d799582d642205cd5b8138a88d2354aa64e3ce32
4
- data.tar.gz: d8bb77cbd98dbd61e32003cf91ace93157a6ad0143be35b29f5d4db8c54a5250
3
+ metadata.gz: f649de4fc1498b7d3ba1df9351244d386830815789d64213e7e7295bb64fe29c
4
+ data.tar.gz: 590f33639faf1c98af0d0fd7b2aeae79ed7f7d57f5983c65a7fc0728d7d167d6
5
5
  SHA512:
6
- metadata.gz: f95304f59367a4000a54c78caafef529ce37640294f29c772f8c585a9a136746c4f599494a1f1de85c362b17fe2f3627996dc656902f48adcc90f54a2342a47e
7
- data.tar.gz: 467b09b770eaf0ed9feae3709b772bf3eb23c17cd753c4b67aa32b26f59892ad8bc42100616bf888e794cf20da079a9f7f1f8115d1436e4c503d3d57787c7759
6
+ metadata.gz: 7c38eef161d63b822b4c17baebcfbac20a54af445620d20b63e3a0d746aee1c1fa0a594d2bf9a067d3fa761c17e6294fc20dc1d6e8230ecbdd97c2651e368675
7
+ data.tar.gz: 1a31b1fce2a21204ef7d9baa240bb5bbc5c76832bc6a5ccabc9780b6df0fd4a7a451b84f08879e70c2bdffbc26191399facb8fb4af7de75b0a952bb3cd7d0f43
@@ -0,0 +1,30 @@
1
+ name: test
2
+ on:
3
+ push:
4
+ branches:
5
+ - master
6
+ pull_request:
7
+ types:
8
+ - opened
9
+ - synchronize
10
+ - reopened
11
+ schedule:
12
+ - cron: "00 15 * * *" # 7:00 PST (-8), 8:00 PDT (-7)
13
+ jobs:
14
+ test:
15
+ runs-on: ubuntu-latest
16
+ container: ${{ matrix.ruby }}
17
+ strategy:
18
+ fail-fast: false
19
+ matrix:
20
+ ruby:
21
+ - ruby:2.5
22
+ - ruby:2.6
23
+ - ruby:2.7
24
+ # TODO: add jruby and truffleruby
25
+ steps:
26
+ - uses: actions/checkout@v2
27
+ - run: apt-get update && apt-get install -y nodejs # For execjs
28
+ - name: bundle install
29
+ run: bundle install -j$(nproc) --retry 3
30
+ - run: bundle exec rake test
@@ -4,7 +4,13 @@ All notable changes to this project will be documented in this file. This
4
4
  project adheres to [Semantic Versioning](http://semver.org/). This change log is based upon
5
5
  [keep-a-changelog](https://github.com/olivierlacan/keep-a-changelog).
6
6
 
7
- ## [2.13.0](https://github.com/k0kubun/hamlit/compare/v2.12.0...v2.13.0) - 2020-10-2
7
+ ## [2.13.1](https://github.com/k0kubun/hamlit/compare/v2.13.0...v2.13.1) - 2020-12-27
8
+
9
+ ### Added
10
+
11
+ - Support [multiline attributes](https://github.com/haml/haml/pull/1043) of Haml 5.2.1.
12
+
13
+ ## [2.13.0](https://github.com/k0kubun/hamlit/compare/v2.12.0...v2.13.0) - 2020-10-02
8
14
 
9
15
  ### Added
10
16
 
@@ -16,6 +22,7 @@ project adheres to [Semantic Versioning](http://semver.org/). This change log is
16
22
  - Upgrade the Haml parser from Haml 4.0 to 5.2 [#163](https://github.com/k0kubun/hamlit/issues/163).
17
23
  - Allow `@` as tag's class name.
18
24
  - Fix NameError on an `InvalidAttributeNameError` reference introduced at Hamlit v2.12.0.
25
+ - You can no longer specify `ugly` option, which has had no effect.
19
26
 
20
27
  ## [2.12.0](https://github.com/k0kubun/hamlit/compare/v2.11.1...v2.12.0) - 2020-09-30
21
28
 
data/README.md CHANGED
@@ -10,17 +10,17 @@ Hamlit is a high performance [Haml](https://github.com/haml/haml) implementation
10
10
  ### What is Hamlit?
11
11
  Hamlit is another implementation of [Haml](https://github.com/haml/haml).
12
12
  With some [limitations](REFERENCE.md#limitations) by design for performance,
13
- Hamlit is **2.39x times faster** than original haml gem in [this benchmark](benchmark/slim/run-benchmarks.rb),
14
- which is an HTML-escaped version of [slim-template/slim's one](https://github.com/slim-template/slim/blob/v3.0.8/benchmarks/run-benchmarks.rb) for fairness. ([Result on Travis](https://travis-ci.org/k0kubun/hamlit/jobs/236567391))
13
+ Hamlit is **1.94x times faster** than original haml gem in [this benchmark](benchmark/slim/run-benchmarks.rb),
14
+ which is an HTML-escaped version of [slim-template/slim's one](https://github.com/slim-template/slim/blob/4.1.0/benchmarks/run-benchmarks.rb) for fairness. ([Result on Travis](https://travis-ci.org/github/k0kubun/hamlit/jobs/732178446))
15
15
 
16
- <img src="https://i.gyazo.com/0f0c0362b6bd69f82715bec1d8caa191.png" width="600px" alt="Hamlit Benchmark"/>
16
+ <img src="https://raw.githubusercontent.com/k0kubun/hamlit/afcc2b36c4861c2f764baa09afd9530ca25eeafa/benchmark/graph/graph.png" width="600x" alt="Hamlit Benchmark" />
17
17
 
18
18
  ```
19
- hamlit v2.8.1: 131048.9 i/s
20
- erubi v1.6.0: 125445.4 i/s - 1.04x slower
21
- slim v3.0.8: 121390.4 i/s - 1.08x slower
22
- faml v0.8.1: 100750.5 i/s - 1.30x slower
23
- haml v5.0.1: 54882.6 i/s - 2.39x slower
19
+ hamlit v2.13.0: 247404.4 i/s
20
+ erubi v1.9.0: 244356.4 i/s - 1.01x slower
21
+ slim v4.1.0: 238254.3 i/s - 1.04x slower
22
+ faml v0.8.1: 197293.2 i/s - 1.25x slower
23
+ haml v5.2.0: 127834.4 i/s - 1.94x slower
24
24
  ```
25
25
 
26
26
  ### Why is Hamlit faster?
Binary file
Binary file
@@ -3,7 +3,7 @@ require 'fileutils'
3
3
  require 'tmpdir'
4
4
 
5
5
  HAML_REPO = 'haml/haml'
6
- HAML_VERSION = 'v5.2.0'
6
+ HAML_VERSION = '5.2.1'
7
7
 
8
8
  module GitHubFetcher
9
9
  def self.fetch(repo, tag:, path:)
@@ -76,7 +76,7 @@ class HamlitParserBuilder
76
76
 
77
77
  DUMMY_CLASSES.each do |file, klass|
78
78
  dest_path = File.join(@hamlit_parser, "haml_#{file}")
79
- src = "class Hamlit::Haml#{klass}; end"
79
+ src = "class Hamlit::Haml#{klass}; end\n"
80
80
  File.write(dest_path, src)
81
81
  end
82
82
  end
@@ -37,7 +37,7 @@ Gem::Specification.new do |spec|
37
37
  spec.add_development_dependency 'haml', '>= 5'
38
38
  spec.add_development_dependency 'less'
39
39
  spec.add_development_dependency 'minitest-reporters', '~> 1.1'
40
- spec.add_development_dependency 'rails', '>= 4.0.0'
40
+ spec.add_development_dependency 'rails', '>= 4.0'
41
41
  spec.add_development_dependency 'rake'
42
42
  spec.add_development_dependency 'rake-compiler'
43
43
  spec.add_development_dependency 'sass'
@@ -1 +1 @@
1
- class Hamlit::HamlCompiler; end
1
+ class Hamlit::HamlCompiler; end
@@ -1 +1 @@
1
- class Hamlit::HamlEscapable; end
1
+ class Hamlit::HamlEscapable; end
@@ -1 +1 @@
1
- class Hamlit::HamlGenerator; end
1
+ class Hamlit::HamlGenerator; end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'ripper'
3
4
  require 'strscan'
4
5
 
5
6
  module Hamlit
@@ -90,6 +91,9 @@ module Hamlit
90
91
  ID_KEY = 'id'.freeze
91
92
  CLASS_KEY = 'class'.freeze
92
93
 
94
+ # Used for scanning old attributes, substituting the first '{'
95
+ METHOD_CALL_PREFIX = 'a('
96
+
93
97
  def initialize(options)
94
98
  @options = HamlOptions.wrap(options)
95
99
  # Record the indent levels of "if" statements to validate the subsequent
@@ -655,13 +659,18 @@ module Hamlit
655
659
  # @return [String] rest
656
660
  # @return [Integer] last_line
657
661
  def parse_old_attributes(text)
658
- text = text.dup
659
662
  last_line = @line.index + 1
660
663
 
661
664
  begin
662
- attributes_hash, rest = balance(text, ?{, ?})
665
+ # Old attributes often look like a valid Hash literal, but it sometimes allow code like
666
+ # `{ hash, foo: bar }`, which is compiled to `_hamlout.attributes({}, nil, hash, foo: bar)`.
667
+ #
668
+ # To scan such code correctly, this scans `a( hash, foo: bar }` instead, stops when there is
669
+ # 1 more :on_embexpr_end (the last '}') than :on_embexpr_beg, and resurrects '{' afterwards.
670
+ balanced, rest = balance_tokens(text.sub(?{, METHOD_CALL_PREFIX), :on_embexpr_beg, :on_embexpr_end, count: 1)
671
+ attributes_hash = balanced.sub(METHOD_CALL_PREFIX, ?{)
663
672
  rescue HamlSyntaxError => e
664
- if text.strip[-1] == ?, && e.message == HamlError.message(:unbalanced_brackets)
673
+ if e.message == HamlError.message(:unbalanced_brackets) && !@template.empty?
665
674
  text << "\n#{@next_line.text}"
666
675
  last_line += 1
667
676
  next_line
@@ -815,6 +824,25 @@ module Hamlit
815
824
  Hamlit::HamlUtil.balance(*args) or raise(HamlSyntaxError.new(HamlError.message(:unbalanced_brackets)))
816
825
  end
817
826
 
827
+ # Unlike #balance, this balances Ripper tokens to balance something like `{ a: "}" }` correctly.
828
+ def balance_tokens(buf, start, finish, count: 0)
829
+ text = ''.dup
830
+ Ripper.lex(buf).each do |_, token, str|
831
+ text << str
832
+ case token
833
+ when start
834
+ count += 1
835
+ when finish
836
+ count -= 1
837
+ end
838
+
839
+ if count == 0
840
+ return text, buf.sub(text, '')
841
+ end
842
+ end
843
+ raise HamlSyntaxError.new(HamlError.message(:unbalanced_brackets))
844
+ end
845
+
818
846
  def block_opened?
819
847
  @next_line.tabs > @line.tabs
820
848
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Hamlit
3
- VERSION = '2.13.0'
3
+ VERSION = '2.13.1'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamlit
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.13.0
4
+ version: 2.13.1
5
5
  platform: java
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-02 00:00:00.000000000 Z
11
+ date: 2020-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -155,7 +155,7 @@ dependencies:
155
155
  requirements:
156
156
  - - ">="
157
157
  - !ruby/object:Gem::Version
158
- version: 4.0.0
158
+ version: '4.0'
159
159
  name: rails
160
160
  type: :development
161
161
  prerelease: false
@@ -163,7 +163,7 @@ dependencies:
163
163
  requirements:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
- version: 4.0.0
166
+ version: '4.0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  requirement: !ruby/object:Gem::Requirement
169
169
  requirements:
@@ -256,8 +256,8 @@ executables:
256
256
  extensions: []
257
257
  extra_rdoc_files: []
258
258
  files:
259
+ - ".github/workflows/test.yml"
259
260
  - ".gitignore"
260
- - ".travis.yml"
261
261
  - CHANGELOG.md
262
262
  - Gemfile
263
263
  - LICENSE.txt
@@ -286,6 +286,8 @@ files:
286
286
  - benchmark/etc/tags_loop.haml
287
287
  - benchmark/ext/build_data.rb
288
288
  - benchmark/ext/build_id.rb
289
+ - benchmark/graph/graph.key
290
+ - benchmark/graph/graph.png
289
291
  - benchmark/id_attribute.haml
290
292
  - benchmark/plain.haml
291
293
  - benchmark/script.haml
@@ -1,53 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- branches:
4
- only:
5
- - master
6
- script:
7
- - bundle exec rake $TASK
8
- env:
9
- - RUBYOPT='-w'
10
- matrix:
11
- include:
12
- - rvm: 2.3.8
13
- env: TASK=test
14
- - rvm: 2.4.9
15
- env: TASK=test
16
- - rvm: 2.5.7
17
- env: TASK=test
18
- - rvm: 2.6.5
19
- env: TASK=test
20
- - rvm: 2.7.0
21
- env: TASK=test
22
- - rvm: 2.7.0
23
- env: TASK=test RUBYOPT='-w --enable-frozen-string-literal'
24
- - rvm: ruby-head
25
- env: TASK=test
26
- - rvm: jruby-9.2.8.0
27
- env: TASK=test
28
- - rvm: truffleruby
29
- env: TASK=test
30
- - rvm: 2.7.0
31
- env: TASK=bench TEMPLATE=benchmark/boolean_attribute.haml,benchmark/class_attribute.haml,benchmark/id_attribute.haml,benchmark/data_attribute.haml,benchmark/common_attribute.haml
32
- - rvm: 2.7.0
33
- env: TASK=bench TEMPLATE=benchmark/dynamic_attributes/boolean_attribute.haml,benchmark/dynamic_attributes/class_attribute.haml,benchmark/dynamic_attributes/id_attribute.haml,benchmark/dynamic_attributes/data_attribute.haml,benchmark/dynamic_attributes/common_attribute.haml
34
- - rvm: 2.7.0
35
- env: TASK=bench SLIM_BENCH=1
36
- - rvm: 2.7.0
37
- env: TASK=bench TEMPLATE=benchmark/etc/attribute_builder.haml
38
- - rvm: 2.7.0
39
- env: TASK=bench TEMPLATE=benchmark/etc/static_analyzer.haml
40
- - rvm: 2.7.0
41
- env: TASK=bench TEMPLATE=benchmark/etc/string_interpolation.haml
42
- - rvm: 2.7.0
43
- env: TASK=bench TEMPLATE=test/haml/templates/standard.haml COMPILE=1
44
- allow_failures:
45
- - rvm: ruby-head
46
- env: TASK=test
47
- - env: TASK=bench TEMPLATE=benchmark/boolean_attribute.haml,benchmark/class_attribute.haml,benchmark/id_attribute.haml,benchmark/data_attribute.haml,benchmark/common_attribute.haml
48
- - env: TASK=bench TEMPLATE=benchmark/dynamic_attributes/boolean_attribute.haml,benchmark/dynamic_attributes/class_attribute.haml,benchmark/dynamic_attributes/id_attribute.haml,benchmark/dynamic_attributes/data_attribute.haml,benchmark/dynamic_attributes/common_attribute.haml
49
- - env: TASK=bench SLIM_BENCH=1
50
- - env: TASK=bench TEMPLATE=benchmark/etc/attribute_builder.haml
51
- - env: TASK=bench TEMPLATE=benchmark/etc/static_analyzer.haml
52
- - env: TASK=bench TEMPLATE=benchmark/etc/string_interpolation.haml
53
- - env: TASK=bench TEMPLATE=test/haml/templates/standard.haml COMPILE=1