elisp2any 0.0.5 → 0.0.6

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.
data/.rdoc_options DELETED
@@ -1,2 +0,0 @@
1
- main_page: README.md
2
- op_dir: html
data/.rubocop.yml DELETED
@@ -1,11 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 3.1
3
- NewCops: enable
4
- DisabledByDefault: true
5
-
6
- Layout/LineLength:
7
- Enabled: false
8
-
9
- Style/FrozenStringLiteralComment:
10
- Enabled: true
11
- EnforcedStyle: never
@@ -1,15 +0,0 @@
1
- = <%= name %>
2
-
3
- <%= synopsis %>
4
-
5
- == Commentary
6
-
7
- <% commentary.each do |paragraph| %>
8
- <%= render_paragraph(paragraph) %>
9
- <% end %>
10
-
11
- == Code
12
-
13
- <% code.each do |block| %>
14
- <%= render_block(block, level: 2) %>
15
- <% end %>
@@ -1,57 +0,0 @@
1
- require 'forwardable'
2
-
3
- module Elisp2any
4
- # This renderer is experimental.
5
- class AsciiDocRenderer
6
- def initialize(file)
7
- @file = file
8
- end
9
-
10
- def render
11
- erb_renderer('index.adoc.erb')
12
- end
13
-
14
- private
15
-
16
- def render_paragraph(paragraph)
17
- adoc = ''
18
- paragraph.each do |line|
19
- line.each do |chunk|
20
- case chunk
21
- when InlineCode
22
- adoc << "``#{chunk.content}``"
23
- when String
24
- adoc << chunk
25
- end
26
- end
27
- end
28
- adoc
29
- end
30
-
31
- def render_block(block, level:)
32
- adoc = ''
33
- case block
34
- when Heading
35
- prefix = '=' * (level + block.level - 1)
36
- adoc << "#{prefix} #{block.content}"
37
- when Paragraph
38
- adoc << render_paragraph(block)
39
- when CodeBlock
40
- adoc << <<~ADOC
41
- ----
42
- #{block.content}
43
- ----
44
- ADOC
45
- end
46
- adoc
47
- end
48
-
49
- def erb_renderer(path)
50
- source = ::File.read(::File.join(__dir__, 'asciidoc_renderer', path))
51
- ERB.new(source).result(binding)
52
- end
53
-
54
- extend Forwardable # :nodoc:
55
- def_delegators :@file, :name, :synopsis, :commentary, :code
56
- end
57
- end
@@ -1,63 +0,0 @@
1
- require_relative 'node'
2
- require_relative 'tree_sitter_parser'
3
- require "elisp2any/header_line"
4
- require "elisp2any/blanklines"
5
- require "elisp2any/commentary"
6
- require "elisp2any/code"
7
- require "elisp2any/footer_line"
8
-
9
- module Elisp2any
10
- class File
11
- attr_reader :name, # TODO: filename
12
- :synopsis, # TODO: header_line, including description
13
- :commentary, :code, :header_line
14
-
15
- def self.scan(scanner)
16
- scanner = scanner.read if scanner.respond_to?(:read)
17
- scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
18
- line = HeaderLine.scan(scanner) or return # TODO: header line
19
- Blanklines.scan(scanner) # optional
20
- commentary = Commentary.scan(scanner)
21
- Blanklines.scan(scanner) # optional
22
- code = Code.scan(scanner)
23
- footer_line = FooterLine.scan(scanner)
24
- footer_line == line.filename or raise Error, "header and footer filename is not same: #{line.filename} and #{footer_line.filename}"
25
- Blanklines.scan(scanner) # optional
26
- scanner.eos? or raise Error, "extra content after footer line"
27
- new(name: line.filename,
28
- synopsis: line.description,
29
- commentary:,
30
- code:,
31
- header_line: line)
32
- end
33
-
34
- def self.parse(source)
35
- source = source.respond_to?(:read) ? source.read : source
36
- ts_node = TreeSitterParser.parse(source)
37
- first_heading, second_heading, *nodes, last_heading = Node.from_tree_sitter(source, ts_node)
38
- name, synopsis = first_heading.name_and_synopsis
39
- second_heading.commentary? or raise Error, "no commentary heading: #{second_heading.inspect}"
40
- commentary = []
41
- until nodes.empty?
42
- (node = nodes.shift).code? and break
43
- commentary << node
44
- end
45
- code = nodes
46
- last_heading.final_name == name or raise Error, 'different names'
47
- new(name: name, synopsis: synopsis, commentary: commentary, code: code)
48
- end
49
-
50
- # TODO: Remove nil default from footer line
51
- def initialize(name:,
52
- synopsis:,
53
- commentary:,
54
- code:,
55
- header_line: nil) # :nodoc:
56
- @name = name
57
- @synopsis = synopsis
58
- @commentary = commentary
59
- @code = code
60
- @header_line = header_line
61
- end
62
- end
63
- end
@@ -1,67 +0,0 @@
1
- require_relative 'codeblock'
2
- require_relative 'line'
3
- require_relative 'heading'
4
- require_relative 'paragraph'
5
- require 'strscan'
6
-
7
- module Elisp2any
8
- # TODO: delete
9
- class Node
10
- attr_reader :range # :nodoc:
11
- attr_reader :content
12
-
13
- def self.from_tree_sitter(source, ts_node) #:nodoc:
14
- nodes = []
15
- (0 ... ts_node.child_count).map { |index| ts_node[index] }.each do |top_level_node|
16
- range = top_level_node.start_byte .. top_level_node.end_byte
17
- content = source.byteslice(range)
18
- node = Node.new(content, range)
19
- case top_level_node.type
20
- when :comment
21
- scanner = StringScanner.new(content)
22
- scanner.skip(';') or raise Error, 'no semicolon for comment'
23
- scanner.skip(';') or
24
- begin
25
- (last_node = nodes.last) && last_node.is_a?(Codeblock) or raise Error, 'no prior code for single semicolon comment'
26
- last_node.append(source, range.end)
27
- next
28
- end
29
-
30
- if (level = scanner.skip(/;+/))
31
- scanner.skip(' ') or raise Error, 'no space after heading semicolons'
32
- nodes << Heading.new(node, level, scanner.rest.chomp)
33
- next
34
- elsif scanner.skip("\n")
35
- next
36
- end
37
-
38
- scanner.skip(' ') or raise Error, "no space after semicolons: #{scanner.inspect}"
39
- line = Line.parse(scanner.rest)
40
- if (last_node = nodes.last) && last_node.is_a?(Paragraph) && last_node.end_row + 1 == top_level_node.start_point.row
41
- last_node << line
42
- else
43
- paragraph = Paragraph.new(node, [line], top_level_node.end_point.row)
44
- nodes << paragraph
45
- end
46
- else
47
- if (last_node = nodes.last) && last_node.is_a?(Codeblock)
48
- last_node.append(source, range.end)
49
- else
50
- nodes << Codeblock.new(node)
51
- end
52
- end
53
- end
54
- nodes
55
- end
56
-
57
- def append(source, end_byte) # :nodoc:
58
- @range = range = @range.begin .. end_byte
59
- @content = source.byteslice(range)
60
- end
61
-
62
- def initialize(content, range) # :nodoc:
63
- @content = content
64
- @range = range
65
- end
66
- end
67
- end
@@ -1,36 +0,0 @@
1
- require 'tree_sitter'
2
-
3
- module Elisp2any
4
- class TreeSitterParser # :nodoc:
5
- def self.parse(source)
6
- new(source).parse
7
- end
8
-
9
- def parse
10
- @node = parser.parse_string(nil, @source).root_node
11
- end
12
-
13
- private
14
-
15
- def initialize(source)
16
- @source = source
17
- end
18
-
19
- def parser
20
- TreeSitter::Parser.new.tap do |p|
21
- p.language = TreeSitter::Language.load('elisp', elisp_library)
22
- end
23
- end
24
-
25
- def elisp_library
26
- shared_object = 'libtree-sitter-elisp.so'
27
-
28
- # Set this env var for Guix shell environment or shared object file is not found
29
- if ENV['ELISP2ANY_GUIX_USE_PROFILE_PATH']
30
- shared_object = ::File.join(ENV["GUIX_ENVIRONMENT"], "lib/tree-sitter", shared_object)
31
- end
32
-
33
- shared_object
34
- end
35
- end
36
- end
data/manifest.scm DELETED
@@ -1,87 +0,0 @@
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"))))
@@ -1,112 +0,0 @@
1
- # TypeProf 0.21.3
2
-
3
- # Classes
4
- module Elisp2any
5
- VERSION: String
6
-
7
- class AsciiDocRenderer
8
- extend Forwardable
9
- @file: untyped
10
-
11
- def initialize: (untyped file) -> void
12
- def render: -> untyped
13
-
14
- private
15
- def render_paragraph: (untyped paragraph) -> String
16
- def render_block: (untyped block, level: untyped) -> String
17
- def erb_renderer: (String path) -> untyped
18
- end
19
-
20
- class CodeBlock
21
- extend Forwardable
22
- @node: Node
23
-
24
- def initialize: (Node node) -> void
25
- def append: (untyped source, untyped end_byte) -> untyped
26
- end
27
-
28
- class InlineCode
29
- attr_reader content: untyped
30
- def initialize: (untyped content) -> void
31
- end
32
-
33
- class Line
34
- extend Forwardable
35
- include Enumerable
36
- @chunks: Array[(InlineCode | String)?]
37
-
38
- def initialize: (Array[(InlineCode | String)?] chunks) -> void
39
- def self.parse: (String string) -> Line
40
- end
41
-
42
- class Heading
43
- extend Forwardable
44
- @node: Node
45
-
46
- attr_reader level: Integer
47
- attr_reader content: String
48
- def initialize: (Node node, Integer level, String content) -> void
49
- def name_and_synopsis: -> [untyped, untyped]?
50
- def commentary?: -> bool
51
- def code?: -> bool
52
- def final_name: -> String?
53
- end
54
-
55
- class Paragraph
56
- extend Forwardable
57
- include Enumerable
58
- @node: Node
59
- @lines: [Line]
60
-
61
- attr_reader end_row: untyped
62
- def initialize: (Node node, [Line] lines, untyped end_row) -> void
63
- def code?: -> false
64
- end
65
-
66
- class Node
67
- attr_reader range: Range
68
- attr_reader content: untyped
69
- def self.from_tree_sitter: (untyped source, untyped ts_node) -> (Array[CodeBlock | Heading | Paragraph])
70
- def append: (untyped source, untyped end_byte) -> untyped
71
- def initialize: (untyped content, Range range) -> void
72
- end
73
-
74
- class TreeSitterParser
75
- @source: untyped
76
- @node: untyped
77
-
78
- def self.parse: (untyped source) -> untyped
79
- def parse: -> untyped
80
-
81
- private
82
- def initialize: (untyped source) -> void
83
- def parser: -> untyped
84
- def elisp_library: -> String
85
- end
86
-
87
- class File
88
- attr_reader name: nil
89
- attr_reader synopsis: nil
90
- attr_reader commentary: Array[(CodeBlock | Heading | Paragraph)?]
91
- attr_reader code: Array[CodeBlock | Heading | Paragraph]
92
- def self.parse: (untyped source) -> File
93
- def initialize: (name: nil, synopsis: nil, commentary: Array[(CodeBlock | Heading | Paragraph)?], code: Array[CodeBlock | Heading | Paragraph]) -> void
94
- end
95
-
96
- class HTMLRenderer
97
- extend Forwardable
98
- @file: untyped
99
-
100
- def initialize: (untyped file) -> void
101
- def render: -> String
102
-
103
- private
104
- def render_paragraph: (untyped paragraph) -> String
105
- def render_block: (untyped block, level: untyped) -> String
106
- def erb_render: (String path) -> String
107
- def h: (untyped string) -> String
108
- end
109
-
110
- class Error < StandardError
111
- end
112
- end
data/sig/elisp2any.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Elisp2any
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end