proscenium 0.19.0.beta17-x86_64-linux → 0.19.0.beta18-x86_64-linux

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: 36cfb9372e295822798d0c1ec930398615266b57c78acfbf9ac4055ba82ecb82
4
- data.tar.gz: 3083d1ac9309e0c00218adec6f1d4d025d7452b7f1ca8366bd4c48e0463a6924
3
+ metadata.gz: 4f17b0d37b874ca3a4e868f53015d43a46aecbac32c54f2951cbbfe7515c71d0
4
+ data.tar.gz: bcf7b35a016537979462b773821a92fa75303ceaec25a1a3c7d47fd73868b43a
5
5
  SHA512:
6
- metadata.gz: 5065d888c4891db0c06eea0c683004547ee54e4ef59d05142ba2c4990c3bcfcbe9f7c71a8e9bb72a541b177ab569f729e597dcbfd45e1344383ba1cec909a84d
7
- data.tar.gz: 2340183a49c82d06d21620cdbc667d2f967bb34535e16c58e954bffe97a2bd407d88e8b9af59a4f492fb0dbba2318d0b98d0db9eac6a75c94693723393b03b92
6
+ metadata.gz: 07ac98ffc1c912bac704015571d0e702ba30baa6306f5b742b5a9b7e791862613ad64ccbd82f9f9b1ff5e2f06e5abd01bca35c0bf2d0796f21b3f9928117cf1d
7
+ data.tar.gz: 3730f8710ef0936502ea9fcdf2b9608e571ebcfc0629ba14d52f9c6e75eb4d29ec115a0b0c67735c5210e7c9c22bcfb742bf67f628a0bd071af4fd75db82596f
@@ -1,44 +1,76 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ruby-next/language'
4
- require 'proscenium/core_ext/object/css_module_ivars'
3
+ require 'prism'
4
+ require 'require-hooks/setup'
5
5
 
6
6
  module Proscenium
7
7
  module CssModule
8
- class Rewriter < RubyNext::Language::Rewriters::Text
9
- NAME = 'proscenium-css-module'
8
+ class Rewriter
9
+ def self.init(include: [], exclude: [])
10
+ RequireHooks.source_transform(
11
+ patterns: include,
12
+ exclude_patterns: exclude
13
+ ) do |path, source|
14
+ source ||= File.read(path)
15
+ Processor.call(source)
16
+ end
17
+ end
18
+
19
+ class Processor < Prism::Visitor
20
+ def self.call(source)
21
+ visitor = new
22
+ visitor.visit(Prism.parse(source).value)
23
+
24
+ buffer = source.dup
25
+ annotations = visitor.annotations
26
+ annotations.sort_by!(&:first)
10
27
 
11
- def rewrite(source)
12
- source = source.gsub(/%i\[((@[\w@ ]+)|([\w@ ]+ @[\w@ ]+))\]/) do |_|
13
- arr = ::Regexp.last_match(1).split.map do |x|
14
- x.start_with?('@') ? css_module_string(x[1..]) : ":#{x}"
28
+ annotations.reverse_each do |offset, action|
29
+ case action
30
+ when :start
31
+ buffer.insert(offset, 'class_names(*')
32
+ when :end
33
+ buffer.insert(offset, ')')
34
+ else
35
+ raise 'Invalid annotation'
36
+ end
15
37
  end
16
- "[#{arr.join(',')}]"
38
+
39
+ buffer
17
40
  end
18
41
 
19
- source.gsub(/:@([\w]+)/) do |_|
20
- context.track!(self)
21
- css_module_string(::Regexp.last_match(1))
42
+ def initialize
43
+ @annotations = []
22
44
  end
23
- end
24
45
 
25
- private
46
+ PREFIX = '@'
47
+
48
+ attr_reader :annotations
49
+
50
+ def visit_assoc_node(node)
51
+ # Skip if the key is not a symbol or string
52
+ return if %i[symbol_node string_node].exclude?(node.key.type)
26
53
 
27
- def css_module_string(name)
28
- if (path = Pathname.new(context.path).sub_ext('.module.css')).exist?
29
- tname = Transformer.new(path).class_name!(name, name.dup).first
30
- "Proscenium::CssModule::Name.new(:@#{name}, '#{tname}', #{path})"
31
- else
32
- "Proscenium::CssModule::Name.new(:@#{name}, css_module(:#{name}), nil)"
54
+ return if node.key.type == :symbol_node && node.key.value != 'class'
55
+ return if node.key.type == :string_node && node.key.content != 'class'
56
+
57
+ value = node.value
58
+ type = value.type
59
+
60
+ if (type == :symbol_node && value.value.start_with?(PREFIX)) ||
61
+ (type == :array_node && value.elements.any? { |it| it.value.start_with?(PREFIX) })
62
+ build_annotation value
63
+ end
64
+ end
65
+
66
+ def build_annotation(value)
67
+ location = value.location
68
+
69
+ @annotations <<
70
+ [location.start_character_offset, :start] <<
71
+ [location.end_character_offset, :end]
33
72
  end
34
73
  end
35
74
  end
36
75
  end
37
76
  end
38
-
39
- RubyNext::Language.send :include_patterns=, []
40
- RubyNext::Language.include_patterns << "#{Rails.root.join('app', 'components')}/*.rb"
41
- RubyNext::Language.include_patterns << "#{Rails.root.join('app', 'views')}/*.rb"
42
- RubyNext::Language.rewriters = [Proscenium::CssModule::Rewriter]
43
-
44
- require 'ruby-next/language/runtime'
@@ -5,6 +5,7 @@ module Proscenium::CssModule
5
5
 
6
6
  autoload :Path
7
7
  autoload :Transformer
8
+ autoload :Rewriter
8
9
 
9
10
  class TransformError < StandardError
10
11
  def initialize(name, additional_msg = nil)
@@ -15,24 +16,6 @@ module Proscenium::CssModule
15
16
  end
16
17
  end
17
18
 
18
- class Name
19
- attr_reader :path
20
-
21
- def initialize(name, transform, path = nil)
22
- @name = name
23
- @transform = transform
24
- @path = path
25
- end
26
-
27
- def to_s
28
- @transform
29
- end
30
-
31
- def to_sym
32
- @name
33
- end
34
- end
35
-
36
19
  # Accepts one or more CSS class names, and transforms them into CSS module names.
37
20
  #
38
21
  # @param name [String,Symbol,Array<String,Symbol>]
Binary file
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Proscenium
4
- VERSION = '0.19.0.beta17'
4
+ VERSION = '0.19.0.beta18'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proscenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0.beta17
4
+ version: 0.19.0.beta18
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Joel Moss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-27 00:00:00.000000000 Z
11
+ date: 2025-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: prism
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rails
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -59,19 +73,19 @@ dependencies:
59
73
  - !ruby/object:Gem::Version
60
74
  version: '9.0'
61
75
  - !ruby/object:Gem::Dependency
62
- name: ruby-next
76
+ name: require-hooks
63
77
  requirement: !ruby/object:Gem::Requirement
64
78
  requirements:
65
79
  - - "~>"
66
80
  - !ruby/object:Gem::Version
67
- version: 1.1.1
81
+ version: '0.2'
68
82
  type: :runtime
69
83
  prerelease: false
70
84
  version_requirements: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
- version: 1.1.1
88
+ version: '0.2'
75
89
  description:
76
90
  email:
77
91
  - joel@developwithstyle.com
@@ -85,7 +99,6 @@ files:
85
99
  - lib/proscenium.rb
86
100
  - lib/proscenium/builder.rb
87
101
  - lib/proscenium/bundled_gems.rb
88
- - lib/proscenium/core_ext/object/css_module_ivars.rb
89
102
  - lib/proscenium/css_module.rb
90
103
  - lib/proscenium/css_module/path.rb
91
104
  - lib/proscenium/css_module/rewriter.rb
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Object
4
- def instance_variable_get(name)
5
- name.is_a?(::Proscenium::CssModule::Name) ? super(name.to_sym) : super
6
- end
7
-
8
- def instance_variable_set(name, obj)
9
- name.is_a?(::Proscenium::CssModule::Name) ? super(name.to_sym, obj) : super
10
- end
11
-
12
- def instance_variable_defined?(name)
13
- name.is_a?(::Proscenium::CssModule::Name) ? super(name.to_sym) : super
14
- end
15
-
16
- def remove_instance_variable(name)
17
- name.is_a?(::Proscenium::CssModule::Name) ? super(name.to_sym) : super
18
- end
19
- end