Class: ParseJS::CommentScanner

Inherits:
Visitor
  • Object
show all
Includes:
AST
Defined in:
lib/parsejs/docs.rb

Direct Known Subclasses

ExtractDocs

Instance Method Summary collapse

Methods inherited from Visitor

#accept, #map, #visit, #visit_ArrayExpression, #visit_BinaryExpression, #visit_BlockStatement, #visit_BreakStatement, #visit_CallExpression, #visit_CatchClause, #visit_Comment, #visit_ConditionalExpression, #visit_ContinueStatement, #visit_DebuggerStatement, #visit_DoWhileStatement, #visit_EmptyStatement, #visit_ExpressionStatement, #visit_ForInStatement, #visit_ForStatement, #visit_FunctionDeclaration, #visit_FunctionExpression, #visit_Identifier, #visit_IfStatement, #visit_Literal, #visit_LogicalExpression, #visit_MemberExpression, #visit_NewExpression, #visit_Number, #visit_ObjectExpression, #visit_ParameterList, #visit_Program, #visit_RegExp, #visit_ReturnStatement, #visit_SequenceExpression, #visit_String, #visit_SwitchCase, #visit_SwitchStatement, #visit_ThisExpression, #visit_ThrowStatement, #visit_TryStatement, #visit_UnaryExpression, #visit_UpdateExpression, #visit_VariableDeclaration, #visit_VariableDeclarator, #visit_WhileStatement, #visit_WithStatement

Constructor Details

#initializeCommentScanner

Returns a new instance of CommentScanner.



8
9
10
11
# File 'lib/parsejs/docs.rb', line 8

def initialize(*)
  @current_comment = nil
  super
end

Instance Method Details

#comment?Boolean

Returns:

  • (Boolean)


13
14
15
16
17
# File 'lib/parsejs/docs.rb', line 13

def comment?
  return false unless @current_comment
  return false if @current_comment.empty?
  return @current_comment.any?(&:multiline?)
end


45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/parsejs/docs.rb', line 45

def print_comment(node)
  return unless comment?

  puts
  puts "-" * 10 + node.class.name + "-" * 10
  puts @current_comment.map { |c| next unless c.multiline?; c.body }.join("\n")
  puts "-" * (10 + node.class.name.size + 10)
  puts

  puts Stringifier.to_string(Marshal.load(Marshal.dump(node)))
  puts
ensure
  @current_comment = nil
end

#process_comment(node) ⇒ Object



41
42
43
# File 'lib/parsejs/docs.rb', line 41

def process_comment(node)
  print_comment(node)
end

#stringify(node) ⇒ Object



19
20
21
# File 'lib/parsejs/docs.rb', line 19

def stringify(node)
  Stringifier.to_string(Marshal.load(Marshal.dump(node)))
end

#strip_leading_whitespace(string) ⇒ Object



60
61
62
63
64
# File 'lib/parsejs/docs.rb', line 60

def strip_leading_whitespace(string)
  min = string.scan(/^[ \t]*(?=\S)/).min
  size = min ? min.size : 0
  string.gsub(/^[ \t]{#{size}}/, '')
end

#visit_AssignmentExpression(expr) ⇒ Object



23
24
25
26
# File 'lib/parsejs/docs.rb', line 23

def visit_AssignmentExpression(expr)
  process_comment(expr)
  super
end

#visit_CommentedStatement(comment) ⇒ Object



28
29
30
31
32
# File 'lib/parsejs/docs.rb', line 28

def visit_CommentedStatement(comment)
  @current_comment = comment.comments

  super
end

#visit_Property(property) ⇒ Object



34
35
36
37
38
39
# File 'lib/parsejs/docs.rb', line 34

def visit_Property(property)
  @current_comment = property.comments
  process_comment(property)

  super
end