diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-04-24 09:26:29 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2020-04-24 10:38:23 +0000 |
| commit | f189c84d1174713c36d3f2c1d172e1ad76776b47 (patch) | |
| tree | 4fd1b961ea9a9559563b3f088a6154e2240f69b2 | |
| parent | lib/string: fix str/.. (diff) | |
| download | alive-f189c84d1174713c36d3f2c1d172e1ad76776b47.tar.gz alive-f189c84d1174713c36d3f2c1d172e1ad76776b47.zip | |
better logging interface
| -rw-r--r-- | alv/copilot.moon | 5 | ||||
| -rw-r--r-- | alv/logger.moon | 34 | ||||
| -rw-r--r-- | alv/registry.moon | 2 | ||||
| -rwxr-xr-x | bin/alv | 2 | ||||
| -rwxr-xr-x | bin/alv-wx | 28 | ||||
| -rw-r--r-- | spec/cell_spec.moon | 2 | ||||
| -rw-r--r-- | spec/input_spec.moon | 2 | ||||
| -rw-r--r-- | spec/parsing_spec.moon | 2 | ||||
| -rw-r--r-- | spec/registry_spec.moon | 2 | ||||
| -rw-r--r-- | spec/result_spec.moon | 2 | ||||
| -rw-r--r-- | spec/scope_spec.moon | 2 | ||||
| -rw-r--r-- | spec/tag_spec.moon | 2 | ||||
| -rw-r--r-- | spec/value_spec.moon | 2 |
13 files changed, 48 insertions, 39 deletions
diff --git a/alv/copilot.moon b/alv/copilot.moon index e5868bb..9d573c0 100644 --- a/alv/copilot.moon +++ b/alv/copilot.moon @@ -22,7 +22,6 @@ class Copilot -- @tparam string file name/path of the alive file to watch and execute new: (file) => @registry = Registry! - @eval_stream, @run_stream = io.stderr, io.stdout @open file if file open: (file) => @@ -43,6 +42,7 @@ class Copilot @poll! if @root + L\set_time 'run' @registry\begin_tick! ok, error = Error.try "updating", -> @root\tick_io! @@ -69,10 +69,9 @@ class Copilot return if @last_modification < modification - L.stream = @eval_stream + L\set_time 'eval' L\log "#{@file} changed at #{modification}" @eval! - L.stream = @run_stream @last_modification = os.time! { diff --git a/alv/logger.moon b/alv/logger.moon index 26126ac..4887d67 100644 --- a/alv/logger.moon +++ b/alv/logger.moon @@ -37,8 +37,19 @@ class Logger else error unpack res - --- the stream to write to. - -- @tfield file stream + --- set the output time (runtime/evaltime). + -- @tparam string time (`'eval'` or `'run'`) + set_time: (time) => + @stream = switch time + when 'eval' then io.stderr + when 'run' then io.stdout + else error "invalid time '#{time}'" + + --- write out a message (for internal use). + -- @tparam string message + put: (message) => + @stream\write message, '\n' + @stream\flush! --- static functions -- @section static @@ -46,21 +57,19 @@ class Logger --- create a new Logger. -- @classmethod -- @tparam string level the log-level to log at. - -- @tparam file stream the stream to write to. - new: (level='log', @stream=io.stdout) => + new: (level='log') => @level = levels[level] or level @prefix = '' + @set_time 'eval' for name, level in pairs levels @[name] = (msg) => return unless @level <= level - - msg = tostring msg - @stream\write @prefix, msg, '\n' - if level == levels.error or @level == levels.debug + @put if level == levels.error or @level == levels.debug where = debug.traceback '', 2 - @stream\write where, '\n' - @stream\flush! + "#{msg}\n#{where}" + else + tostring msg if level == levels.print @push = (fn, ...) => fn ... @@ -78,9 +87,8 @@ class Logger -- - `'silent'` -- -- @tparam ?string level the level to initialize the logger at. - -- @tparam ?file stream the output stream (stdout). - @init: (...) -> - L = Logger ... + @init: (...) => + L = @ ... { :Logger diff --git a/alv/registry.moon b/alv/registry.moon index a39a1d7..21f57aa 100644 --- a/alv/registry.moon +++ b/alv/registry.moon @@ -113,7 +113,7 @@ class Registry --- get the active Registry. -- - -- Raises an erro when there is no active Regsitry. + -- Raises an error when there is no active Registry. -- -- @treturn Registry @active: -> assert Registry.active_registry, "no active Registry!" @@ -13,7 +13,7 @@ for a in *arg else table.insert arguments, a -Logger.init arguments.log +Logger\init arguments.log assert arguments[1], "no filename given" copilot = Copilot arguments[1] @@ -10,14 +10,18 @@ from wx STARTSTOP = 100 -class GUIStream - new: (@ctrl) => - - write: (...) => - message = table.concat {...}, '' - @ctrl\AppendText message - - flush: => +class GUILogger extends Logger + new: (level, @eval_ctrl, @run_ctrl) => + super level + + set_time: (time) => + @ctrl = switch time + when 'eval' then @eval_ctrl + when 'run' then @run_ctrl + else error "invalid time '#{time}'" + + put: (message) => + @ctrl\AppendText message .. '\n' class GUICopilot extends Copilot new: (...) => @@ -48,11 +52,9 @@ class GUICopilot extends Copilot splitter = wxSplitterWindow @frame, wx.wxID_ANY - eval, ctrl = @mkPanel splitter, 'eval-time messages' - @eval_stream = GUIStream ctrl + eval, @eval_ctrl = @mkPanel splitter, 'eval-time messages' - run, ctrl = @mkPanel splitter, 'run-time messages' - @run_stream = GUIStream ctrl + run, @run_ctrl = @mkPanel splitter, 'run-time messages' splitter\SetMinimumPaneSize 60 splitter\SplitHorizontally eval, run, 0 @@ -136,5 +138,5 @@ for a in *arg table.insert arguments, a copilot = GUICopilot arguments[1] -Logger.init arguments.log, copilot.eval_stream +GUILogger\init arguments.log, copilot.eval_ctrl, copilot.run_ctrl copilot.app\MainLoop! diff --git a/spec/cell_spec.moon b/spec/cell_spec.moon index 81f30b1..f58cb50 100644 --- a/spec/cell_spec.moon +++ b/spec/cell_spec.moon @@ -1,7 +1,7 @@ import Cell, RootCell from require 'alv.cell' import ValueStream, Scope, Tag, SimpleRegistry, globals from require 'alv' import Logger from require 'alv.logger' -Logger.init 'silent' +Logger\init 'silent' hello_world = Cell.parse (Tag.parse '2'), { '', (ValueStream.sym 'hello'), ' ', (ValueStream.str 'world'), '' } two_plus_two = Cell.parse (Tag.parse '3'), { '', (ValueStream.sym '+'), ' ', (ValueStream.num 2), ' ', (ValueStream.num 2), '' } diff --git a/spec/input_spec.moon b/spec/input_spec.moon index 131ed4c..9a380f1 100644 --- a/spec/input_spec.moon +++ b/spec/input_spec.moon @@ -1,7 +1,7 @@ import Input, Result, ValueStream, EventStream, IOStream from require 'alv.base' import SimpleRegistry from require 'alv' import Logger from require 'alv.logger' -Logger.init 'silent' +Logger\init 'silent' reg = SimpleRegistry! setup -> reg\grab! diff --git a/spec/parsing_spec.moon b/spec/parsing_spec.moon index ce519a4..ecc8ff3 100644 --- a/spec/parsing_spec.moon +++ b/spec/parsing_spec.moon @@ -2,7 +2,7 @@ import space, atom, expr, explist, cell, program, comment from require 'alv.parsing' import ValueStream from require 'alv' import Logger from require 'alv.logger' -Logger.init 'silent' +Logger\init 'silent' verify_parse = (parser, str) -> with assert parser\match str diff --git a/spec/registry_spec.moon b/spec/registry_spec.moon index 82816ba..4b0cfc3 100644 --- a/spec/registry_spec.moon +++ b/spec/registry_spec.moon @@ -1,6 +1,6 @@ import Registry, Tag from require 'alv.registry' import Logger from require 'alv.logger' -Logger.init 'silent' +Logger\init 'silent' mk = -> mock destroy: => diff --git a/spec/result_spec.moon b/spec/result_spec.moon index 643514e..c254b42 100644 --- a/spec/result_spec.moon +++ b/spec/result_spec.moon @@ -1,7 +1,7 @@ import Result, Scope, SimpleRegistry from require 'alv' import Input, Op, ValueStream, EventStream, IOStream from require 'alv.base' import Logger from require 'alv.logger' -Logger.init 'silent' +Logger\init 'silent' op_with_inputs = (inputs) -> with Op! diff --git a/spec/scope_spec.moon b/spec/scope_spec.moon index 301512c..beeeeac 100644 --- a/spec/scope_spec.moon +++ b/spec/scope_spec.moon @@ -1,7 +1,7 @@ import Scope, ValueStream, Result from require 'alv' import Op from require 'alv.base' import Logger from require 'alv.logger' -Logger.init 'silent' +Logger\init 'silent' class TestOp extends Op new: (...) => super ... diff --git a/spec/tag_spec.moon b/spec/tag_spec.moon index e0f2023..e68409a 100644 --- a/spec/tag_spec.moon +++ b/spec/tag_spec.moon @@ -1,7 +1,7 @@ import Tag from require 'alv.tag' import Registry from require 'alv.registry' import Logger from require 'alv.logger' -Logger.init 'silent' +Logger\init 'silent' reg = Registry! setup -> reg\begin_eval! diff --git a/spec/value_spec.moon b/spec/value_spec.moon index 457557d..e867a70 100644 --- a/spec/value_spec.moon +++ b/spec/value_spec.moon @@ -1,7 +1,7 @@ import ValueStream, Result, Scope, SimpleRegistry from require 'alv' import Op, Builtin from require 'alv.base' import Logger from require 'alv.logger' -Logger.init 'silent' +Logger\init 'silent' class TestOp extends Op new: (...) => super ... |
