elisp2any 0.0.3 → 0.0.4

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: cfaef7d1de4a445f1055d3093dd6afb0b3f87db67dff17b4a3bf17e451e042c6
4
- data.tar.gz: 3746dd755e216ffda34d037bb3c1070dadb1b8b485426a25c59555d284e7f55a
3
+ metadata.gz: 43ac0e60fb0505d1dfedf717b38966d20340412d119b4ad6842751e92b6d6774
4
+ data.tar.gz: ca6adc49a9eff939fac9aa31b97b2f07194d276042aea5c46b9bcc099a392326
5
5
  SHA512:
6
- metadata.gz: 13d87c5c455d13766deea274183b1a3f32e4165c0f7edbb68e680f977e1c8987eec0808bff8a1285ed9a617d0796e9fdee43784f8955e681feffc41fd0be06d6
7
- data.tar.gz: 97d5d3ca8dfe1f14a26c21bb5d4062a789ac77e2a05ddeb568a624f2ff16dc3cc2e83415d979e612d504aa883af50cd44275289e633521622049188d8db37bd5
6
+ metadata.gz: 3ae7c237a6d260412d87ed8b506efb52694a3b85e10a27e2a0277839a6512ec06a4c3945a368bc2b9e876b1c8fe89c822ed282c1a0c921e864b651b911f84d7c
7
+ data.tar.gz: 257b9a436a46b010773af8e0180b4e8417be2469a464bda2214cafac6734d5bb85771bc0213a8073fead2fdfe461595a44952483c477f698a3b4514febce9228
data/.document ADDED
@@ -0,0 +1,4 @@
1
+ README.md
2
+ lib/**/*.rb
3
+ CHANGELOG.md
4
+ LICENSE.txt
data/.rdoc_options ADDED
@@ -0,0 +1,2 @@
1
+ main_page: README.md
2
+ op_dir: html
data/CHANGELOG.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Change log of Elisp2any
2
2
 
3
- ## Unreleased
3
+ ## 0.0.4 - 2025-02-08
4
+
5
+ * Improved shared object searching for Guix.
4
6
 
5
7
  ## 0.0.3 - 2024-11-16
6
8
 
data/Rakefile CHANGED
@@ -7,11 +7,22 @@ Rake::TestTask.new(:test) do |t|
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
- require 'rubocop/rake_task'
10
+ default_tasks = %i[test]
11
11
 
12
- RuboCop::RakeTask.new
12
+ rubocop = true
13
13
 
14
- task default: %i[test rubocop]
14
+ begin
15
+ require 'rubocop/rake_task'
16
+ rescue LoadError
17
+ rubocop = false
18
+ end
19
+
20
+ if rubocop
21
+ RuboCop::RakeTask.new
22
+ default_tasks << :rubocop
23
+ end
24
+
25
+ task default: default_tasks
15
26
 
16
27
  require 'rdoc/task'
17
28
  RDoc::Task.new do |rdoc|
data/fixtures/init.el CHANGED
@@ -1,4 +1,4 @@
1
- ;;; init.el --- Emacs configuration
1
+ ;;; init.el --- Emacs configuration -*- lexical-binding: t; -*-
2
2
 
3
3
  ;;; Commentary:
4
4
 
@@ -51,7 +51,7 @@ module Elisp2any
51
51
  ERB.new(source).result(binding)
52
52
  end
53
53
 
54
- extend Forwardable
54
+ extend Forwardable # :nodoc:
55
55
  def_delegators :@file, :name, :synopsis, :commentary, :code
56
56
  end
57
57
  end
@@ -0,0 +1,17 @@
1
+ module Elisp2any
2
+ class Blanklines
3
+ attr_reader :count
4
+
5
+ def self.scan(scanner)
6
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
7
+ count = 0
8
+ count += 1 while !scanner.eos? && scanner.skip(/ *\n/)
9
+ count.zero? and return
10
+ new(count:)
11
+ end
12
+
13
+ def initialize(count:) # :nodoc:
14
+ @count = count
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,35 @@
1
+ require "elisp2any/top_heading"
2
+ require "elisp2any/paragraph"
3
+ require "elisp2any/blanklines"
4
+ require "elisp2any/section"
5
+
6
+ module Elisp2any
7
+ class Code
8
+ attr_reader :paragraphs, :sections
9
+
10
+ def self.scan(scanner)
11
+ pos = scanner.pos
12
+ heading = TopHeading.scan(scanner) or return
13
+ unless heading.content == "Code:"
14
+ scanner.pos = pos
15
+ return
16
+ end
17
+ Blanklines.scan(scanner) # optional
18
+ paragraphs = []
19
+ while (par = Paragraph.scan(scanner))
20
+ paragraphs << par
21
+ Blanklines.scan(scanner) # optional
22
+ end
23
+ section = Section.scan(scanner)
24
+ unless section.heading.level == 1
25
+ raise "TODO"
26
+ end
27
+ new(paragraphs:, sections: [section])
28
+ end
29
+
30
+ def initialize(paragraphs:, sections:)
31
+ @paragraphs = paragraphs
32
+ @sections = sections
33
+ end
34
+ end
35
+ end
@@ -1,7 +1,7 @@
1
1
  require 'forwardable'
2
2
 
3
3
  module Elisp2any
4
- class CodeBlock
4
+ class CodeBlock # :nodoc:
5
5
  def initialize(node) # :nodoc:
6
6
  @node = node
7
7
  end
@@ -10,7 +10,7 @@ module Elisp2any
10
10
  @node.append(source, end_byte)
11
11
  end
12
12
 
13
- extend Forwardable
13
+ extend Forwardable # :nodoc:
14
14
  def_delegators :@node, :content
15
15
  end
16
16
  end
@@ -0,0 +1,17 @@
1
+ module Elisp2any
2
+ class Comment
3
+ attr_reader :colons, :content, :padding
4
+
5
+ def self.scan(scanner)
6
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
7
+ scanner.skip(/(?<colons>;+)(?<padding> *)(?<content>.*)\n?/) or return
8
+ new(colons: scanner[:colons].size, content: scanner[:content], padding: scanner[:padding])
9
+ end
10
+
11
+ def initialize(colons:, content:, padding:)
12
+ @colons = colons
13
+ @content = content
14
+ @padding = padding
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ require "elisp2any/top_heading"
2
+ require "elisp2any/paragraph"
3
+ require "elisp2any/blanklines"
4
+
5
+ module Elisp2any
6
+ class Commentary
7
+ attr_reader :paragraphs
8
+
9
+ def self.scan(scanner)
10
+ pos = scanner.pos
11
+ heading = TopHeading.scan(scanner) or return
12
+ unless heading.content == "Commentary:"
13
+ scanner.pos = pos
14
+ return
15
+ end
16
+ Blanklines.scan(scanner) # optional
17
+ paragraphs = []
18
+ while (par = Paragraph.scan(scanner))
19
+ paragraphs << par
20
+ Blanklines.scan(scanner) # optional
21
+ end
22
+ new(paragraphs:)
23
+ end
24
+
25
+ def initialize(paragraphs:)
26
+ @paragraphs = paragraphs
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ module Elisp2any
2
+ class Expression
3
+ attr_reader :content
4
+
5
+ def self.scan(scanner)
6
+ content = scanner.scan(/t\b/) or return
7
+ new(content:)
8
+ end
9
+
10
+ def initialize(content:)
11
+ @content = content
12
+ end
13
+ end
14
+ end
@@ -1,9 +1,25 @@
1
1
  require_relative 'node'
2
2
  require_relative 'tree_sitter_parser'
3
+ require "elisp2any/header_line"
4
+ require "elisp2any/blanklines"
5
+ require "elisp2any/commentary"
6
+ require "elisp2any/code"
3
7
 
4
8
  module Elisp2any
5
9
  class File
6
- attr_reader :name, :synopsis, :commentary, :code
10
+ attr_reader :name, # TODO: filename
11
+ :synopsis, # TODO: header_line, including description
12
+ :commentary, :code
13
+
14
+ def self.scan(scanner)
15
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
16
+ line = HeaderLine.scan(scanner) or return
17
+ Blanklines.scan(scanner) # optional
18
+ commentary = Commentary.scan(scanner)
19
+ Blanklines.scan(scanner) # optional
20
+ code = Code.scan(scanner)
21
+ new(name: line.filename, synopsis: line.description, commentary:, code:)
22
+ end
7
23
 
8
24
  def self.parse(source)
9
25
  source = source.respond_to?(:read) ? source.read : source
@@ -0,0 +1,14 @@
1
+ module Elisp2any
2
+ class Filename
3
+ attr_reader :content
4
+
5
+ def self.scan(scanner)
6
+ content = scanner.scan(/[a-z]+[.]el\b/) or return
7
+ new(content:)
8
+ end
9
+
10
+ def initialize(content:)
11
+ @content = content
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,47 @@
1
+ require "elisp2any/comment"
2
+ require "elisp2any/filename"
3
+ require "elisp2any/header_line_variables"
4
+
5
+ module Elisp2any
6
+ class HeaderLine
7
+ attr_reader :filename, :description, :variables
8
+
9
+ def self.scan(scanner)
10
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:pos)
11
+ pos = scanner.pos
12
+ unless (heading = TopHeading.scan(scanner))
13
+ scanner.pos = pos
14
+ return
15
+ end
16
+ cscanner = StringScanner.new(heading.content)
17
+ unless (filename = Filename.scan(cscanner))
18
+ scanner.pos = pos
19
+ return
20
+ end
21
+ unless cscanner.skip(/ +--- +/)
22
+ scanner.pos = pos
23
+ return
24
+ end
25
+ description = +""
26
+ variables = nil
27
+ until cscanner.eos?
28
+ if (variables = HeaderLineVariables.scan(cscanner)) # nop
29
+ break
30
+ else
31
+ description << cscanner.getch
32
+ end
33
+ end
34
+ if description.empty?
35
+ scanner.pos = pos
36
+ return
37
+ end
38
+ new(filename: filename.content, description:, variables: variables.variables)
39
+ end
40
+
41
+ def initialize(filename:, description:, variables:)
42
+ @filename = filename
43
+ @description = description
44
+ @variables = variables
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ require "elisp2any/variable"
2
+ require "elisp2any/expression"
3
+
4
+ module Elisp2any
5
+ class HeaderLineVariableAssignment
6
+ attr_reader :variable, :expression
7
+
8
+ def self.scan(scanner)
9
+ pos = scanner.pos
10
+ variable = Variable.scan(scanner) or return
11
+ unless scanner.skip(/ *: */)
12
+ scanner.pos = pos
13
+ return
14
+ end
15
+ unless (expression = Expression.scan(scanner))
16
+ scanner.pos = pos
17
+ return
18
+ end
19
+ new(variable: variable.name, expression: expression.content)
20
+ end
21
+
22
+ def initialize(variable:, expression:)
23
+ @variable = variable
24
+ @expression = expression
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ require "elisp2any/variable"
2
+ require "elisp2any/expression"
3
+ require "elisp2any/header_line_variable_assignment"
4
+
5
+ module Elisp2any
6
+ class HeaderLineVariables
7
+ attr_reader :variables
8
+
9
+ def self.scan(scanner)
10
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:pos)
11
+ pos = scanner.pos
12
+ scanner.skip(/ *-[*]- +/) or return
13
+ variables = {}
14
+ until scanner.skip(/ +-[*]- */)
15
+ if scanner.eos?
16
+ scanner.pos = pos
17
+ return
18
+ elsif (assign = HeaderLineVariableAssignment.scan(scanner))
19
+ variables[assign.variable] = assign.expression
20
+ elsif scanner.skip(";")
21
+ break
22
+ else
23
+ raise scanner.inspect
24
+ end
25
+ end
26
+ new(variables:)
27
+ end
28
+
29
+ def initialize(variables:)
30
+ @variables = variables
31
+ end
32
+ end
33
+ end
@@ -5,6 +5,17 @@ module Elisp2any
5
5
  class Heading
6
6
  attr_reader :level, :content
7
7
 
8
+ def self.scan(scanner)
9
+ pos = scanner.pos
10
+ comment = Comment.scan(scanner) or return
11
+ unless comment.colons >= 3
12
+ scanner.pos = pos
13
+ return
14
+ end
15
+ new(:TODO, comment.colons - 3, comment.content)
16
+ end
17
+
18
+ # TODO
8
19
  def initialize(node, level, content) # :nodoc:
9
20
  @node = node
10
21
  @level = level
@@ -57,7 +57,7 @@ module Elisp2any
57
57
  CGI.escape_html(string)
58
58
  end
59
59
 
60
- extend Forwardable
60
+ extend Forwardable # :nodoc:
61
61
  def_delegators :@file, :name, :synopsis, :commentary, :code
62
62
  end
63
63
  end
@@ -1,9 +1,23 @@
1
1
  require 'strscan'
2
2
  require 'forwardable'
3
3
  require_relative 'inline_code'
4
+ require "elisp2any/comment"
4
5
 
5
6
  module Elisp2any
6
7
  class Line
8
+ def self.scan(scanner)
9
+ pos = scanner.pos
10
+ comment = Comment.scan(scanner) or return
11
+ unless comment.colons == 2
12
+ scanner.pos = pos
13
+ return
14
+ end
15
+ unless comment.padding[0] == " "
16
+ raise Error, "line comment should have a whitespace padding"
17
+ end
18
+ new(["#{comment.padding[1..]}#{comment.content}"])
19
+ end
20
+
7
21
  def initialize(chunks) # :nodoc:
8
22
  @chunks = chunks
9
23
  end
@@ -1,9 +1,24 @@
1
1
  require 'forwardable'
2
+ require "elisp2any/line"
2
3
 
3
4
  module Elisp2any
4
5
  class Paragraph
6
+ attr_reader :lines
7
+
8
+ def self.scan(scanner)
9
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
10
+ lines = []
11
+ while (line = Line.scan(scanner))
12
+ lines << line
13
+ end
14
+ lines.empty? and return
15
+ new(:TODO, lines, :TODO)
16
+ end
17
+
18
+ # TODO: delete
5
19
  attr_reader :end_row # :nodoc:
6
20
 
21
+ # TODO: delete node and end_row
7
22
  def initialize(node, lines, end_row) # :nodoc:
8
23
  @node = node
9
24
  @lines = lines
@@ -0,0 +1,25 @@
1
+ require "elisp2any/heading"
2
+ require "elisp2any/paragraph"
3
+ require "elisp2any/blanklines"
4
+
5
+ module Elisp2any
6
+ class Section
7
+ attr_reader :heading
8
+
9
+ def self.scan(scanner)
10
+ heading = Heading.scan(scanner) or return
11
+ Blanklines.scan(scanner) # optional
12
+ paragraphs = []
13
+ while (par = Paragraph.scan(scanner))
14
+ paragraphs << par
15
+ Blanklines.scan(scanner) # optional
16
+ end
17
+ new(heading:, paragraphs:)
18
+ end
19
+
20
+ def initialize(heading:, paragraphs:)
21
+ @heading = heading
22
+ @paragraphs = paragraphs
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ require "elisp2any/heading"
2
+
3
+ module Elisp2any
4
+ class TopHeading
5
+ attr_reader :content
6
+
7
+ def self.scan(scanner)
8
+ pos = scanner.pos
9
+ heading = Heading.scan(scanner)
10
+ unless heading.level.zero?
11
+ scanner.pos = pos
12
+ return
13
+ end
14
+ new(content: heading.content)
15
+ end
16
+
17
+ def initialize(content:)
18
+ @content = content
19
+ end
20
+ end
21
+ end
@@ -27,8 +27,7 @@ module Elisp2any
27
27
 
28
28
  # Set this env var for Guix shell environment or shared object file is not found
29
29
  if ENV['ELISP2ANY_GUIX_USE_PROFILE_PATH']
30
- profile = ::File.dirname(ENV['PATH'].split(':').select { |path| path.start_with?('/gnu/store/') }.first)
31
- shared_object = ::File.join(profile, 'lib/tree-sitter', shared_object)
30
+ shared_object = ::File.join(ENV["GUIX_ENVIRONMENT"], "lib/tree-sitter", shared_object)
32
31
  end
33
32
 
34
33
  shared_object
@@ -0,0 +1,14 @@
1
+ module Elisp2any
2
+ class Variable
3
+ attr_reader :name
4
+
5
+ def self.scan(scanner)
6
+ name = scanner.scan(/[a-z-]+/) or return
7
+ new(name:)
8
+ end
9
+
10
+ def initialize(name:)
11
+ @name = name
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Elisp2any
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
data/lib/elisp2any.rb CHANGED
@@ -2,5 +2,7 @@ require_relative 'elisp2any/version'
2
2
  require_relative 'elisp2any/file'
3
3
 
4
4
  module Elisp2any
5
- class Error < StandardError; end
5
+ autoload :HeaderLine, "elisp2any/header_line.rb"
6
+ autoload :Blanklines, "elisp2any/blanklines.rb"
7
+ Error = Class.new(StandardError)
6
8
  end
data/manifest.scm CHANGED
@@ -1,6 +1,87 @@
1
- (specifications->manifest (list "ruby@3.1"
2
- "ruby-tree-sitter"
3
- "tree-sitter-elisp"
4
- "ruby-webrick"
5
- "ruby-rubocop"
6
- "ruby-asciidoctor"))
1
+ (use-modules (guix packages)
2
+ ((guix licenses) #:prefix license:)
3
+ (guix git-download)
4
+ (guix build-system ruby)
5
+ (guix build-system tree-sitter)
6
+ (gnu packages tree-sitter)
7
+ (gnu packages ruby))
8
+
9
+ (define-public ruby-tree-sitter
10
+ (let ((commit "2c56b04283f2a8cfed7d6c527ca36b8e1127ee8c")
11
+ (revision "0"))
12
+ (package
13
+ (name "ruby-tree-sitter")
14
+ (version (git-version "0.20.8.1" revision commit))
15
+ (source
16
+ (origin
17
+ (method git-fetch)
18
+ (uri (git-reference
19
+ (url "https://github.com/Faveod/ruby-tree-sitter")
20
+ (commit commit)))
21
+ (file-name (git-file-name name version))
22
+ (sha256
23
+ (base32 "144kp0ya4rl03bgwpix17bgq2ak2kqk63pwniy6sfxfjqp5yzr7f"))))
24
+ (build-system ruby-build-system)
25
+ (arguments
26
+ (list
27
+ #:phases #~(modify-phases %standard-phases
28
+ (add-after 'extract-gemspec 'remove-depends
29
+ (lambda _
30
+ (substitute* "tree_sitter.gemspec"
31
+ ((".*minitest-color.*")
32
+ "\n")
33
+ ((".*pry.*")
34
+ "\n")
35
+ ((".*rake.*")
36
+ "\n"))
37
+ (substitute* "test/test_helper.rb"
38
+ ((".*minitest/color.*")
39
+ "\n"))))
40
+ (add-before 'build 'compile
41
+ (lambda _
42
+ (invoke "rake" "compile")))
43
+ (add-before 'check 'set-path
44
+ (lambda* (#:key inputs #:allow-other-keys)
45
+ (let ((ruby (assoc-ref inputs "tree-sitter-ruby")))
46
+ (setenv "TREE_SITTER_PARSERS"
47
+ (string-append ruby "/lib/tree-sitter")))))
48
+ (add-before 'check 'remove-failing-test
49
+ (lambda _
50
+ (delete-file "test/tree_sitter/node_test.rb"))))))
51
+ (native-inputs (list ruby-minitest ruby-rake-compiler
52
+ ruby-rake-compiler-dock ruby-ruby-memcheck
53
+ tree-sitter-ruby))
54
+ (inputs (list tree-sitter))
55
+ (synopsis "Ruby bindings for Tree-Sitter")
56
+ (description "Ruby bindings for Tree-Sitter")
57
+ (home-page "https://www.github.com/Faveod/ruby-tree-sitter")
58
+ (license license:expat))))
59
+
60
+ (define-public tree-sitter-elisp
61
+ (let ((commit "e5524fdccf8c22fc726474a910e4ade976dfc7bb")
62
+ (revision "0"))
63
+ (package
64
+ (name "tree-sitter-elisp")
65
+ (version (git-version "0.1.4" revision commit))
66
+ (source
67
+ (origin
68
+ (method git-fetch)
69
+ (uri (git-reference
70
+ (url "https://github.com/Wilfred/tree-sitter-elisp")
71
+ (commit commit)))
72
+ (file-name (git-file-name name version))
73
+ (sha256
74
+ (base32 "1wyzfb27zgpvm4110jgv0sl598mxv5dkrg2cwjw3p9g2bq9mav5d"))))
75
+ (build-system tree-sitter-build-system)
76
+ (home-page "https://github.com/Wilfred/tree-sitter-elisp")
77
+ (synopsis "Tree-sitter grammar for Emacs Lisp")
78
+ (description "This package provides an Emacs Lisp grammar for the Tree-sitter library.")
79
+ (license license:expat))))
80
+
81
+ (concatenate-manifests
82
+ (list
83
+ (packages->manifest (list ruby-tree-sitter tree-sitter-elisp))
84
+ (specifications->manifest (list "ruby@3.1"
85
+ "ruby-webrick"
86
+ "ruby-rubocop"
87
+ "ruby-asciidoctor"))))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elisp2any
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - gemmaro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-16 00:00:00.000000000 Z
11
+ date: 2025-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby_tree_sitter
@@ -103,7 +103,9 @@ executables:
103
103
  extensions: []
104
104
  extra_rdoc_files: []
105
105
  files:
106
+ - ".document"
106
107
  - ".envrc"
108
+ - ".rdoc_options"
107
109
  - ".rubocop.yml"
108
110
  - CHANGELOG.md
109
111
  - Gemfile
@@ -115,8 +117,17 @@ files:
115
117
  - lib/elisp2any.rb
116
118
  - lib/elisp2any/asciidoc_renderer.rb
117
119
  - lib/elisp2any/asciidoc_renderer/index.adoc.erb
120
+ - lib/elisp2any/blanklines.rb
121
+ - lib/elisp2any/code.rb
118
122
  - lib/elisp2any/code_block.rb
123
+ - lib/elisp2any/comment.rb
124
+ - lib/elisp2any/commentary.rb
125
+ - lib/elisp2any/expression.rb
119
126
  - lib/elisp2any/file.rb
127
+ - lib/elisp2any/filename.rb
128
+ - lib/elisp2any/header_line.rb
129
+ - lib/elisp2any/header_line_variable_assignment.rb
130
+ - lib/elisp2any/header_line_variables.rb
120
131
  - lib/elisp2any/heading.rb
121
132
  - lib/elisp2any/html_renderer.rb
122
133
  - lib/elisp2any/html_renderer/index.html.erb
@@ -124,13 +135,17 @@ files:
124
135
  - lib/elisp2any/line.rb
125
136
  - lib/elisp2any/node.rb
126
137
  - lib/elisp2any/paragraph.rb
138
+ - lib/elisp2any/section.rb
139
+ - lib/elisp2any/top_heading.rb
127
140
  - lib/elisp2any/tree_sitter_parser.rb
141
+ - lib/elisp2any/variable.rb
128
142
  - lib/elisp2any/version.rb
129
143
  - manifest.scm
130
144
  - sig/elisp2any.gen.rbs
131
145
  - sig/elisp2any.rbs
132
146
  homepage: https://codeberg.org/gemmaro/elisp2any
133
- licenses: []
147
+ licenses:
148
+ - Apache-2.0
134
149
  metadata:
135
150
  rubygems_mfa_required: 'true'
136
151
  bug_tracker_uri: https://codeberg.org/gemmaro/elisp2any/issues