lib/vedeu/support/trace.rb in vedeu-0.2.2 vs lib/vedeu/support/trace.rb in vedeu-0.2.3
- old
+ new
@@ -20,28 +20,30 @@
def initialize(options = {})
@options = options
end
# Performs the trace operation. Building strings which include:
- # - a count of classes registered with Vedeu,
- # - the class name being traced,
- # - the method name being traced,
- # - any local variables belonging to the method.
+ # - (class_count) a count of classes registered with Vedeu,
+ # - (classname) the class name being traced,
+ # - (id) the method name being traced,
+ # - (vars) any local variables belonging to the method.
#
+ # @todo Deprecate, and use TracePoint instead.
+ #
# @return []
def trace
set_trace_func proc { |event, file, line, id, binding, classname|
- if event == watched && classes.include?(classname.to_s)
+ if event == watched && id != :log && classes.include?(classname.to_s)
vars = variables(binding)
if vars.empty?
- log_this(sprintf("(%s) %s %-25s #%-30s",
- class_count, event, classname, id))
+ log_this(sprintf("%s %-25s #%-20s",
+ class_count, classname, id))
else
- log_this(sprintf("(%s) %s %-25s #%-30s\n%s\n",
- class_count, event, classname, id, vars))
+ log_this(sprintf("%s %-25s #%-20s\n%s\n",
+ class_count, classname, id, vars))
end
end
} if trace?
end
@@ -67,15 +69,19 @@
def variables(binding)
entries = []
binding.eval('local_variables').each do |var|
variable = var.to_s
value = binding.local_variable_get(var)
+ valclass = value.class.to_s
output = (value.is_a?(Proc)) ? '#<Proc:...' : value.inspect
- entries << sprintf("\e[32m%57s %-10s\e[39m= \e[34m%s\e[39m", " ",
- variable,
- output)
+ content = Esc.send(class_colour.fetch(valclass, :white)) { output }
+
+ entries << sprintf("%33s %-10s = %s %s", " ",
+ Esc.green { variable },
+ Esc.magenta { valclass },
+ content)
end
entries.join("\n")
end
# @api private
@@ -103,26 +109,127 @@
trace: Vedeu::Configuration.trace?,
event: 'call',
}
end
+ # @return [Hash]
+ def class_colour
+ {
+ 'Array' => :yellow,
+ 'Fixnum' => :cyan,
+ 'Hash' => :blue,
+ 'NilClass' => :red,
+ 'String' => :green,
+ 'Symbol' => :magenta,
+ }
+ end
+
# Returns the number of Vedeu classes/modules. (Useful for debugging.)
#
- # @api private
- # @return [Fixnum]
+ # @return [String]
def class_count
- classes.size.to_s
+ @_count ||= "(#{classes.size.to_s}/#{vedeu_classes.size.to_s})"
end
- # Returns all the classes defined within Vedeu.
+ # Returns the classes to be traced, without exceptions or ignored classes.
#
# @api private
# @return [Set]
def classes
- @_classes ||= Vedeu.constants.collect do |c|
+ @_classes ||= vedeu_classes - vedeu_exceptions - ignored_classes
+ end
+
+ # Returns all the classes defined within Vedeu.
+ #
+ # @return [Set]
+ def vedeu_classes
+ @_vedeu_classes ||= Vedeu.constants.collect do |c|
Vedeu.const_get(c).to_s
end.to_set
end
- end
- # :nocov:
-end
+ # Returns all the exceptions defined within Vedeu.
+ #
+ # @todo Vedeu should produce this set.
+ #
+ # @return [Set]
+ def vedeu_exceptions
+ Set.new [
+ 'Vedeu::BufferNotFound',
+ 'Vedeu::CursorNotFound',
+ 'Vedeu::GroupNotFound',
+ 'Vedeu::InterfaceNotFound',
+ 'Vedeu::InvalidSyntax',
+ 'Vedeu::KeyInUse',
+ 'Vedeu::MenuNotFound',
+ 'Vedeu::MissingRequired',
+ 'Vedeu::ModeSwitch',
+ 'Vedeu::NoInterfacesDefined',
+ 'Vedeu::NotImplemented',
+ 'Vedeu::OutOfRange',
+ ]
+ end
+
+ # Returns a set of classes to ignore during tracing.
+ #
+ # @todo Make this configurable at runtime.
+ #
+ # @return [Set]
+ def ignored_classes
+ Set.new [
+ # 'Vedeu::API',
+ # 'Vedeu::Application',
+ # 'Vedeu::Area',
+ # 'Vedeu::Background',
+ # 'Vedeu::Buffers',
+ # 'Vedeu::Clear',
+ 'Vedeu::Coercions',
+ 'Vedeu::Colour',
+ 'Vedeu::ColourTranslator',
+ 'Vedeu::Common',
+ # 'Vedeu::Composition',
+ # 'Vedeu::Compositor',
+ 'Vedeu::Configuration',
+ # 'Vedeu::Cursor',
+ # 'Vedeu::Cursors',
+ 'Vedeu::Esc',
+ 'Vedeu::Event',
+ # 'Vedeu::Events',
+ # 'Vedeu::Focus',
+ # 'Vedeu::Foreground',
+ 'Vedeu::Geometry',
+ # 'Vedeu::Grid',
+ # 'Vedeu::Groups',
+ # 'Vedeu::Input',
+ # 'Vedeu::Interface',
+ # 'Vedeu::Interfaces',
+ # 'Vedeu::Keymap',
+ # 'Vedeu::Keymaps',
+ # 'Vedeu::KeymapValidator',
+ # 'Vedeu::Launcher',
+ # 'Vedeu::Line',
+ 'Vedeu::Log',
+ # 'Vedeu::Menu',
+ # 'Vedeu::Menus',
+ 'Vedeu::MonoLogger',
+ # 'Vedeu::Offset',
+ # 'Vedeu::Offsets',
+ 'Vedeu::Position',
+ 'Vedeu::Presentation',
+ # 'Vedeu::Refresh',
+ # 'Vedeu::Registrar',
+ # 'Vedeu::Render',
+ 'Vedeu::Repository',
+ 'Vedeu::Stream',
+ 'Vedeu::Style',
+ 'Vedeu::Terminal',
+ 'Vedeu::Trace',
+ # 'Vedeu::View',
+ # 'Vedeu::Viewport',
+ ]
+ end
+
+ # :nocov:
+
+ end # Trace
+
+end # Vedeu