module Omnitest::Psychic::Code2Doc::CodeHelper
Public Instance Methods
code2doc(options = { format: :markdown })
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 81 def code2doc(options = { format: :markdown }) source_code = File.read(absolute_source_file) segmenter_language = infer_language(source_file) buffer = StringIO.new segmenter_options = { language: segmenter_language } segmenter = Omnitest::Psychic::Code2Doc::CodeSegmenter.new(segmenter_options) segments = segmenter.segment source_code segments.each do |comment, code| comment = comment.join("\n") code = code.join("\n") code = code_block(code, segmenter_language, options) unless code.empty? next if comment.empty? && code.empty? code = "\n#{code}\n" if !comment.empty? && !code.empty? # Markdown needs separation buffer.puts [comment, code].join("\n") end buffer.string end
code_block(source_code, language, opts = { format: :markdown })
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 42 def code_block(source_code, language, opts = { format: :markdown }) case opts[:format].to_sym when :rst ReStructuredTextHelper.code_block source_code, language when :md, :markdown MarkdownHelper.code_block source_code, language when :raw source_code else fail ArgumentError, "Unknown format: #{opts[:format]}" end end
highlighted_code(formatter = 'terminal256')
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 37 def highlighted_code(formatter = 'terminal256') language, _comment_style = Code2Doc::CommentStyles.infer source_file.extname highlight(source, language: language, filename: absolute_source_file, formatter: formatter) end
infer_language(file)
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 102 def infer_language(file) language, comment_style = Psychic::Code2Doc::CommentStyles.infer File.extname(file) segmenter_language = comment_style[:language] || language end
snippet_after(matcher)
click to toggle source
Loses proper indentation on comments
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 56 def snippet_after(matcher) segments = segmenter.segment(source) buffer = StringIO.new segment = segments.find do |s| doc_segment_content = s.first.join doc_segment_content.match matcher end buffer.print segment[1].join "\n" if segment # return code segment buffer.string end
snippet_between(before_matcher, after_matcher)
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 67 def snippet_between(before_matcher, after_matcher) segments = segmenter.segment(source) start_segment = find_segment_index segments, before_matcher end_segment = find_segment_index segments, after_matcher buffer = StringIO.new if start_segment && end_segment segments[start_segment...end_segment].each do |segment| buffer.puts @segmenter.comment(segment[0]) unless segment == segments[start_segment] buffer.puts segment[1].join end end buffer.string end
source()
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 29 def source File.read absolute_source_file end
source?()
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 33 def source? !absolute_source_file.nil? end
Private Instance Methods
find_segment_index(segments, matcher)
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 113 def find_segment_index(segments, matcher) segments.find_index do |s| doc_segment_content = s.first.join doc_segment_content.match matcher end end
segmenter()
click to toggle source
# File lib/omnitest/psychic/code2doc/code_helper.rb, line 109 def segmenter @segmenter ||= Code2Doc::CodeSegmenter.new end