donna
Version:
A CoffeeScript documentation generator.
98 lines (76 loc) • 2.56 kB
text/coffeescript
Node = require './node'
Doc = require './doc'
# Public: The Node representation of a CoffeeScript variable.
module.exports = class Variable extends Node
# Public: Construct a variable node.
#
# entity - The variable's {Class}
# node - The variable node (a {Object})
# lineMapping - An object mapping the actual position of a member to its Donna one
# options - The parser options (a {Object})
# classType - A {Boolean} indicating if the class is a `class` or an `instance`
# comment - The comment node (a {Object})
constructor: (@entity, @node, @lineMapping, @options, @classType = false, comment = null) ->
try
@doc = new Doc(comment, @options)
@getName()
catch error
console.warn('Create variable error:', @node, error) if @options.verbose
# Public: Get the variable type, either `class` or `constant`
#
# Returns the variable type (a {String}).
getType: ->
unless @type
@type = if @classType then 'class' else 'instance'
@type
# Public: Test if the given value should be treated ad constant.
#
# Returns true if a constant (a {Boolean})
#
isConstant: ->
unless @constant
@constant = /^[A-Z_-]*$/.test @getName()
@constant
# Public: Get the class doc
#
# Returns the class doc (a [Doc]).
getDoc: -> @doc
# Public: Get the variable name
#
# Returns the variable name (a {String}).
getName: ->
try
unless @name
@name = @node.variable.base.value
for prop in @node.variable.properties
@name += ".#{ prop.name.value }"
if /^this\./.test @name
@name = @name.substring(5)
@type = 'class'
@name
catch error
console.warn('Get method name error:', @node, error) if @options.verbose
# Public: Get the source line number
#
# Returns a {Number}.
getLocation: ->
try
unless @location
{locationData} = @node.variable
firstLine = locationData.first_line + 1
if !@lineMapping[firstLine]?
@lineMapping[firstLine] = @lineMapping[firstLine - 1]
@location = { line: @lineMapping[firstLine] }
@location
catch error
console.warn("Get location error at #{@fileName}:", @node, error) if @options.verbose
# Public: Get the variable value.
#
# Returns the value (a {String}).
getValue: ->
try
unless @value
@value = @node.value.base.compile({ indent: '' })
@value
catch error
console.warn('Get method value error:', @node, error) if @options.verbose