kramdown-man 0.1.9 → 1.0.0
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/.gitignore +4 -3
- data/.yardopts +1 -1
- data/ChangeLog.md +55 -0
- data/Gemfile +6 -3
- data/README.md +152 -54
- data/bin/kramdown-man +3 -12
- data/lib/kramdown/man/cli.rb +202 -0
- data/lib/kramdown/{converter/man.rb → man/converter.rb} +318 -87
- data/lib/kramdown/man/task.rb +1 -1
- data/lib/kramdown/man/version.rb +1 -1
- data/lib/kramdown/man.rb +26 -3
- data/man/kramdown-man.1 +191 -110
- data/man/kramdown-man.1.md +90 -32
- data/spec/cli_spec.rb +218 -0
- data/spec/converter_spec.rb +969 -0
- data/spec/{document_spec.rb → integration_spec.rb} +1 -1
- data/spec/spec_helper.rb +2 -0
- metadata +7 -5
- data/spec/converter/man_spec.rb +0 -579
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d53e0152c21c6a0e3e32b4f2dc2d185577eb01f34cd9cbfb8a300e5077e6648
|
4
|
+
data.tar.gz: c825469b0addc74ff69b1d1b53c54021d7020e9ae7284b94913187d58a61e6a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa320fdff23430cb680ad6aadae1b52a79a9eb78bd42ab58b802460c23892f0597a3b536744ffc40584c3309c441a6f8671a37ba9a149653f7ff27ced654f90d
|
7
|
+
data.tar.gz: 69465385b9ec09efcbe01ccb45c014c47dc04485687682167a68dc0f700e3009a34080d0048ffbc3612991fee9dc16f7445dca7078ab52c0c35860ec798a9f89
|
data/.gitignore
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
-
Gemfile.lock
|
2
|
-
|
3
|
-
|
1
|
+
/Gemfile.lock
|
2
|
+
/coverage/
|
3
|
+
/doc/
|
4
|
+
/pkg/
|
data/.yardopts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--markup markdown --
|
1
|
+
--markup markdown --title "kramdown-man Documentation" --protected
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,58 @@
|
|
1
|
+
### 1.0.0 / 2023-12-03
|
2
|
+
|
3
|
+
* Ignore `kd:blank` elements to reduce size of generated man pages.
|
4
|
+
* No longer output `.HP` paragraphs due to cross-platform compatibility issues
|
5
|
+
with `groff`, `nroff`, `troff`.
|
6
|
+
* Renamed `Kramdown::Converters::Man` to {Kramdown::Man::Converter}.
|
7
|
+
* Override {Kramdown::Document#to_man} to use our {Kramdown::Man::Converter}.
|
8
|
+
|
9
|
+
#### Syntax
|
10
|
+
|
11
|
+
* Added support for definition lists.
|
12
|
+
* Switched to using definition lists for documenting options and arguments.
|
13
|
+
|
14
|
+
```markdown
|
15
|
+
## ARGUMENTS
|
16
|
+
|
17
|
+
*ARG*
|
18
|
+
: Description goes here.
|
19
|
+
|
20
|
+
...
|
21
|
+
```
|
22
|
+
|
23
|
+
```markdown
|
24
|
+
## OPTIONS
|
25
|
+
|
26
|
+
`-o`, `--option` *VALUE
|
27
|
+
: Description goes here.
|
28
|
+
|
29
|
+
...
|
30
|
+
```
|
31
|
+
* Added support for rendering relative links to other markdown man pages
|
32
|
+
as `SEE ALSO` man page references.
|
33
|
+
|
34
|
+
Example:
|
35
|
+
|
36
|
+
```markdown
|
37
|
+
[foo-bar](foo-bar.1.md)
|
38
|
+
```
|
39
|
+
|
40
|
+
Will be converted into:
|
41
|
+
|
42
|
+
```
|
43
|
+
foo-bar(1)
|
44
|
+
```
|
45
|
+
* Ignore horizontal rule elements due to cross-platform compatibility issues
|
46
|
+
with `groff`, `nroff`, `troff`.
|
47
|
+
|
48
|
+
#### CLI
|
49
|
+
|
50
|
+
* Added the `-o`, `--output FILE` option.
|
51
|
+
* Added the `-V`, `--version` option.
|
52
|
+
* Display the `kramdown-man.1` man page when `--help` is given, if STDOUT is
|
53
|
+
a TTY. If STDOUT is not a TTY, then the usual `--help` information will be
|
54
|
+
printed.
|
55
|
+
|
1
56
|
### 0.1.9 / 2023-12-01
|
2
57
|
|
3
58
|
* Allow markdown `man:file.ext` style links, since man pages can be named after
|
data/Gemfile
CHANGED
@@ -4,7 +4,10 @@ gemspec
|
|
4
4
|
|
5
5
|
group :development do
|
6
6
|
gem 'rake'
|
7
|
-
gem 'rubygems-tasks',
|
8
|
-
gem 'rspec',
|
9
|
-
gem '
|
7
|
+
gem 'rubygems-tasks', '~> 0.2'
|
8
|
+
gem 'rspec', '~> 3.0'
|
9
|
+
gem 'simplecov', '~> 0.20'
|
10
|
+
gem 'redcarpet', platform: :mri
|
11
|
+
gem 'yard', '~> 0.9'
|
12
|
+
gem 'dead_end', require: false
|
10
13
|
end
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# kramdown-man
|
2
2
|
|
3
|
+
[](https://github.com/postmodern/kramdown-man/actions/workflows/ruby.yml)
|
4
|
+
[](https://codeclimate.com/github/postmodern/kramdown-man)
|
5
|
+
[](https://badge.fury.io/rb/kramdown-man)
|
6
|
+
|
3
7
|
* [Homepage](https://github.com/postmodern/kramdown-man#readme)
|
4
8
|
* [Issues](https://github.com/postmodern/kramdown-man/issues)
|
5
9
|
* [Documentation](http://rubydoc.info/gems/kramdown-man/frames)
|
@@ -11,124 +15,209 @@ A [Kramdown][kramdown] convert for converting Markdown files into man pages.
|
|
11
15
|
## Features
|
12
16
|
|
13
17
|
* Converts markdown to [roff]:
|
14
|
-
* Supports codespans, emphasis and strong fonts.
|
15
|
-
* Supports normal
|
16
|
-
* Supports
|
18
|
+
* Supports codespans, emphasis, and strong fonts.
|
19
|
+
* Supports normal and tagged paragraphs.
|
20
|
+
* Supports codeblocks and blockquotes.
|
21
|
+
* Supports bullet, numbered, and definition lists.
|
17
22
|
* Supports multi-paragraph list items and blockquotes.
|
18
|
-
* Supports
|
19
|
-
|
20
|
-
into man page references.
|
23
|
+
* Supports converting `[foo-bar](foo-bar.1.md)` and `[bash](man:bash(1))`
|
24
|
+
links into `SEE ALSO` man page references.
|
21
25
|
* Provides Rake task for converting `man/*.md` into man pages.
|
22
26
|
* Uses the pure-Ruby [Kramdown][kramdown] markdown parser.
|
23
27
|
* Supports [Ruby] 3.x, [JRuby], and [TruffleRuby].
|
24
28
|
|
25
29
|
## Synopsis
|
26
30
|
|
31
|
+
```
|
32
|
+
usage: kramdown-man [options] MARKDOWN_FILE
|
33
|
+
-o, --output FILE Write the man page output to the file
|
34
|
+
-V, --version Print the version
|
35
|
+
-h, --help Print the help output
|
36
|
+
|
37
|
+
Examples:
|
38
|
+
kramdown-man -o man/myprogram.1 man/myprogram.1.md
|
39
|
+
kramdown-man man/myprogram.1.md
|
40
|
+
|
41
|
+
```
|
42
|
+
|
27
43
|
Render a man page from markdown:
|
28
44
|
|
29
|
-
|
45
|
+
```shell
|
46
|
+
kramdown-man -o man/myprogram.1 man/myprogram.1.md
|
47
|
+
```
|
48
|
+
|
49
|
+
Preview the rendered man page:
|
50
|
+
|
51
|
+
```shell
|
52
|
+
kramdown-man man/myprogram.1.md
|
53
|
+
```
|
30
54
|
|
31
55
|
## Examples
|
32
56
|
|
33
57
|
Render a man page from a markdown file:
|
34
58
|
|
35
|
-
|
59
|
+
```ruby
|
60
|
+
require 'kramdown/man'
|
36
61
|
|
37
|
-
|
38
|
-
|
62
|
+
doc = Kramdown::Document.new(File.read('man/kramdown-man.1.md'))
|
63
|
+
File.write('man/kramdown-man.1',doc.to_man)
|
39
64
|
|
40
|
-
|
65
|
+
system 'man', 'man/kramdown-man.1'
|
66
|
+
```
|
41
67
|
|
42
68
|
Define a `man` and file tasks which render all `*.md` files within the
|
43
69
|
`man/` directory:
|
44
70
|
|
45
|
-
|
46
|
-
|
71
|
+
```ruby
|
72
|
+
require 'kramdown/man/task'
|
73
|
+
Kramdown::Man::Task.new
|
74
|
+
```
|
47
75
|
|
48
76
|
## Syntax
|
49
77
|
|
50
|
-
###
|
78
|
+
### Code
|
51
79
|
|
52
|
-
|
80
|
+
```markdown
|
81
|
+
`code`
|
82
|
+
```
|
53
83
|
|
54
84
|
`code`
|
55
85
|
|
56
|
-
|
86
|
+
### Emphasis
|
57
87
|
|
88
|
+
```markdown
|
58
89
|
*emphasis*
|
90
|
+
```
|
59
91
|
|
60
|
-
|
92
|
+
*emphasis*
|
93
|
+
|
94
|
+
### Strong
|
95
|
+
|
96
|
+
```markdown
|
97
|
+
**strong**
|
98
|
+
```
|
61
99
|
|
62
100
|
**strong**
|
63
101
|
|
64
|
-
###
|
102
|
+
### Paragraph
|
65
103
|
|
66
|
-
|
104
|
+
```markdown
|
105
|
+
Normal paragraph.
|
106
|
+
```
|
67
107
|
|
68
108
|
Normal paragraph.
|
69
109
|
|
70
|
-
|
110
|
+
#### Usage String
|
111
|
+
|
112
|
+
```markdown
|
113
|
+
`command` [`--foo`] **FILE**
|
114
|
+
```
|
71
115
|
|
72
116
|
`command` [`--foo`] **FILE**
|
73
117
|
|
74
|
-
|
75
|
-
|
118
|
+
#### Argument Definitions
|
119
|
+
|
120
|
+
```markdown
|
121
|
+
*ARG*
|
122
|
+
: Description here.
|
123
|
+
```
|
124
|
+
|
125
|
+
*ARG*
|
126
|
+
: Description here.
|
127
|
+
|
128
|
+
#### Option Definitions
|
76
129
|
|
77
|
-
|
78
|
-
|
130
|
+
```markdown
|
131
|
+
`-o`, `--option` *VALUE*
|
132
|
+
: Description here.
|
133
|
+
```
|
134
|
+
|
135
|
+
`-o`, `--option` *VALUE*
|
136
|
+
: Description here.
|
79
137
|
|
80
138
|
### Links
|
81
139
|
|
82
|
-
|
140
|
+
```markdown
|
141
|
+
[website](http://example.com/)
|
142
|
+
```
|
83
143
|
|
84
144
|
[website](http://example.com/)
|
85
145
|
|
86
|
-
|
146
|
+
#### Man Pages
|
147
|
+
|
148
|
+
Link to other man pages in a project:
|
87
149
|
|
150
|
+
```markdown
|
151
|
+
[kramdown-man](kramdown-man.1.md)
|
152
|
+
```
|
153
|
+
|
154
|
+
[kramdown-man](https://github.com/postmodern/kramdown-man/blob/main/man/kramdown-man.1.md)
|
155
|
+
|
156
|
+
Link to other system man page:
|
157
|
+
|
158
|
+
```markdown
|
88
159
|
[bash](man:bash(1))
|
160
|
+
```
|
161
|
+
|
162
|
+
[bash](man:bash(1))
|
163
|
+
|
164
|
+
**Note:** only works on [firefox] on Linux.
|
89
165
|
|
90
|
-
|
166
|
+
[firefox]: https://www.mozilla.org/en-US/firefox/new/
|
167
|
+
|
168
|
+
#### Email Addresses
|
169
|
+
|
170
|
+
```markdown
|
171
|
+
Email <bob@example.com>
|
172
|
+
```
|
91
173
|
|
92
174
|
Email <bob@example.com>
|
93
175
|
|
94
176
|
### Lists
|
95
177
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
178
|
+
```markdown
|
179
|
+
* one
|
180
|
+
* two
|
181
|
+
* three
|
182
|
+
```
|
102
183
|
|
103
184
|
* one
|
104
185
|
* two
|
105
186
|
* three
|
106
187
|
|
107
|
-
|
188
|
+
#### Numbered Lists
|
108
189
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
190
|
+
```markdown
|
191
|
+
1. one
|
192
|
+
2. two
|
193
|
+
3. three
|
194
|
+
```
|
114
195
|
|
115
196
|
1. one
|
116
197
|
2. two
|
117
198
|
3. three
|
118
199
|
|
119
|
-
|
200
|
+
#### Definition Lists
|
201
|
+
|
202
|
+
```markdown
|
203
|
+
ex·am·ple
|
204
|
+
: a thing characteristic of its kind or illustrating a general rule.
|
120
205
|
|
121
|
-
|
206
|
+
: a person or thing regarded in terms of their fitness to be imitated or the likelihood of their being imitated.
|
207
|
+
```
|
122
208
|
|
123
|
-
|
209
|
+
ex·am·ple
|
210
|
+
: a thing characteristic of its kind or illustrating a general rule.
|
124
211
|
|
125
|
-
|
212
|
+
: a person or thing regarded in terms of their fitness to be imitated or the likelihood of their being imitated.
|
126
213
|
|
127
214
|
### Blockquotes
|
128
215
|
|
129
|
-
|
130
|
-
|
131
|
-
|
216
|
+
```markdown
|
217
|
+
> Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.
|
218
|
+
>
|
219
|
+
> --Antoine de Saint-Exupéry
|
220
|
+
```
|
132
221
|
|
133
222
|
> Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.
|
134
223
|
>
|
@@ -136,13 +225,20 @@ Email <bob@example.com>
|
|
136
225
|
|
137
226
|
### Code Blocks
|
138
227
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
228
|
+
```markdown
|
229
|
+
Source code:
|
230
|
+
|
231
|
+
#include <stdio.h>
|
232
|
+
|
233
|
+
int main()
|
234
|
+
{
|
235
|
+
printf("hello world\n");
|
236
|
+
return 0;
|
237
|
+
}
|
238
|
+
|
239
|
+
```
|
240
|
+
|
241
|
+
Source code:
|
146
242
|
|
147
243
|
#include <stdio.h>
|
148
244
|
|
@@ -158,7 +254,9 @@ Email <bob@example.com>
|
|
158
254
|
|
159
255
|
## Install
|
160
256
|
|
161
|
-
|
257
|
+
```shell
|
258
|
+
gem install kramdown-man
|
259
|
+
```
|
162
260
|
|
163
261
|
## Alternatives
|
164
262
|
|
data/bin/kramdown-man
CHANGED
@@ -1,16 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
lib_dir = File.expand_path('../lib',
|
3
|
+
lib_dir = File.expand_path('../lib',__dir__)
|
4
4
|
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
5
5
|
|
6
|
-
require 'kramdown'
|
7
|
-
|
8
|
-
|
9
|
-
case ARGV[0]
|
10
|
-
when '-h', '--help'
|
11
|
-
warn "usage: #{File.dirname($0)} <INPUT.md >OUTPUT"
|
12
|
-
exit
|
13
|
-
end
|
14
|
-
|
15
|
-
doc = Kramdown::Document.new(ARGF.read)
|
16
|
-
puts doc.to_man
|
6
|
+
require 'kramdown/man/cli'
|
7
|
+
exit Kramdown::Man::CLI.run(ARGV)
|
@@ -0,0 +1,202 @@
|
|
1
|
+
require 'kramdown'
|
2
|
+
require 'kramdown/man'
|
3
|
+
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
module Kramdown
|
7
|
+
module Man
|
8
|
+
#
|
9
|
+
# Represents the `kramdown-man` command's logic.
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
#
|
13
|
+
# @since 1.0.0
|
14
|
+
#
|
15
|
+
class CLI
|
16
|
+
|
17
|
+
# The program name.
|
18
|
+
PROGRAM_NAME = "kramdown-man"
|
19
|
+
|
20
|
+
# The URL to report bugs to.
|
21
|
+
BUG_REPORT_URL = "https://github.com/postmodern/kramdown-man/issues/new"
|
22
|
+
|
23
|
+
# The path to the man/ directory.
|
24
|
+
MAN_PAGE = File.join(__dir__,'..','..','..','man','kramdown-man.1')
|
25
|
+
|
26
|
+
# The command's option parser.
|
27
|
+
#
|
28
|
+
# @return [OptionParser]
|
29
|
+
attr_reader :option_parser
|
30
|
+
|
31
|
+
# The optional output file to write to.
|
32
|
+
#
|
33
|
+
# @return [String, nil]
|
34
|
+
attr_reader :output
|
35
|
+
|
36
|
+
#
|
37
|
+
# Initializes the command.
|
38
|
+
#
|
39
|
+
def initialize
|
40
|
+
@option_parser = option_parser
|
41
|
+
|
42
|
+
@output = nil
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# Initializes and runs the command.
|
47
|
+
#
|
48
|
+
# @param [Array<String>] argv
|
49
|
+
# Command-line arguments.
|
50
|
+
#
|
51
|
+
# @return [Integer]
|
52
|
+
# The exit status of the command.
|
53
|
+
#
|
54
|
+
def self.run(argv)
|
55
|
+
new().run(argv)
|
56
|
+
rescue Interrupt
|
57
|
+
# https://tldp.org/LDP/abs/html/exitcodes.html
|
58
|
+
return 130
|
59
|
+
rescue Errno::EPIPE
|
60
|
+
# STDOUT pipe broken
|
61
|
+
return 0
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Runs the command.
|
66
|
+
#
|
67
|
+
# @param [Array<String>] argv
|
68
|
+
# Command-line arguments.
|
69
|
+
#
|
70
|
+
# @return [Integer]
|
71
|
+
# The return status code.
|
72
|
+
#
|
73
|
+
def run(argv=ARGV)
|
74
|
+
argv = begin
|
75
|
+
@option_parser.parse(argv)
|
76
|
+
rescue OptionParser::ParseError => error
|
77
|
+
print_error(error.message)
|
78
|
+
return -1
|
79
|
+
end
|
80
|
+
|
81
|
+
markdown = case argv.length
|
82
|
+
when 1
|
83
|
+
path = argv[0]
|
84
|
+
|
85
|
+
unless File.file?(path)
|
86
|
+
print_error "no such file or directory: #{path}"
|
87
|
+
return -1
|
88
|
+
end
|
89
|
+
|
90
|
+
File.read(path)
|
91
|
+
when 0
|
92
|
+
print_error "a MARKDOWN_FILE argument is required"
|
93
|
+
return -1
|
94
|
+
else
|
95
|
+
print_error "too many arguments given"
|
96
|
+
return -1
|
97
|
+
end
|
98
|
+
|
99
|
+
doc = Kramdown::Document.new(markdown)
|
100
|
+
man_page = doc.to_man
|
101
|
+
|
102
|
+
if @output
|
103
|
+
File.write(@output,man_page)
|
104
|
+
elsif $stdout.tty?
|
105
|
+
view_man_page(man_page)
|
106
|
+
else
|
107
|
+
puts man_page
|
108
|
+
end
|
109
|
+
|
110
|
+
return 0
|
111
|
+
rescue => error
|
112
|
+
print_backtrace(error)
|
113
|
+
return -1
|
114
|
+
end
|
115
|
+
|
116
|
+
#
|
117
|
+
# Displays the man page using the `man` command.
|
118
|
+
#
|
119
|
+
# @param [String] man_page
|
120
|
+
# The man page output.
|
121
|
+
#
|
122
|
+
def view_man_page(man_page)
|
123
|
+
io = IO.popen(%w[man -l -],'w')
|
124
|
+
pid = io.pid
|
125
|
+
|
126
|
+
begin
|
127
|
+
io.puts man_page
|
128
|
+
rescue Errno::EPIPE
|
129
|
+
ensure
|
130
|
+
io.close
|
131
|
+
|
132
|
+
begin
|
133
|
+
Process.waitpid(pid)
|
134
|
+
rescue Errno::EPIPE, Errno::ECHILD
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
#
|
140
|
+
# The option parser.
|
141
|
+
#
|
142
|
+
# @return [OptionParser]
|
143
|
+
#
|
144
|
+
def option_parser
|
145
|
+
OptionParser.new do |opts|
|
146
|
+
opts.banner = "usage: #{PROGRAM_NAME} [options] MARKDOWN_FILE"
|
147
|
+
|
148
|
+
opts.on('-o','--output FILE','Write the man page output to the file') do |file|
|
149
|
+
@output = file
|
150
|
+
end
|
151
|
+
|
152
|
+
opts.on('-V','--version','Print the version') do
|
153
|
+
puts "#{PROGRAM_NAME} #{VERSION}"
|
154
|
+
exit
|
155
|
+
end
|
156
|
+
|
157
|
+
opts.on('-h','--help','Print the help output') do
|
158
|
+
if $stdout.tty?
|
159
|
+
system('man',MAN_PAGE)
|
160
|
+
else
|
161
|
+
puts opts
|
162
|
+
end
|
163
|
+
|
164
|
+
exit
|
165
|
+
end
|
166
|
+
|
167
|
+
opts.separator ""
|
168
|
+
opts.separator "Examples:"
|
169
|
+
opts.separator " #{PROGRAM_NAME} -o man/myprogram.1 man/myprogram.1.md"
|
170
|
+
opts.separator " #{PROGRAM_NAME} man/myprogram.1.md"
|
171
|
+
opts.separator ""
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
#
|
176
|
+
# Prints an error message to stderr.
|
177
|
+
#
|
178
|
+
# @param [String] error
|
179
|
+
# The error message.
|
180
|
+
#
|
181
|
+
def print_error(error)
|
182
|
+
$stderr.puts "#{PROGRAM_NAME}: #{error}"
|
183
|
+
end
|
184
|
+
|
185
|
+
#
|
186
|
+
# Prints a backtrace to stderr.
|
187
|
+
#
|
188
|
+
# @param [Exception] exception
|
189
|
+
# The exception.
|
190
|
+
#
|
191
|
+
def print_backtrace(exception)
|
192
|
+
$stderr.puts "Oops! Looks like you've found a bug!"
|
193
|
+
$stderr.puts "Please report the following text to: #{BUG_REPORT_URL}"
|
194
|
+
$stderr.puts
|
195
|
+
$stderr.puts "```"
|
196
|
+
$stderr.puts "#{exception.full_message}"
|
197
|
+
$stderr.puts "```"
|
198
|
+
end
|
199
|
+
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|