Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
04d4e93
pkg/calc: initial POC
ripta Apr 7, 2025
b6383ca
pkg/calc: sketching out parser
ripta Sep 25, 2025
26f436c
go.mod: add tty handling modules
ripta Nov 27, 2025
42edd72
pkg/calc: lexer unit test
ripta Nov 28, 2025
6528ba0
pkg/calc/parser: fix type switches
ripta Nov 28, 2025
f3152ba
pkg/calc/tokens: add parens
ripta Nov 28, 2025
27acd4c
pkg/calc/lexer: add lexing for missing tokens
ripta Nov 28, 2025
42f44eb
pkg/calc/parser: initial implementation
ripta Nov 28, 2025
2e205fd
pkg/calc/tokens: add Position.IsZero helper
ripta Nov 28, 2025
4d0c271
pkg/calc: implement temporary evaluator
ripta Nov 28, 2025
e966893
go.mod: add ripta/reals for constructive reals support
ripta Nov 27, 2025
7b32c42
pkg/calc/parser: migrate from float64 representation to unified reals
ripta Nov 28, 2025
5238565
pkg/calc: wire up unified reals into the evaluator
ripta Nov 28, 2025
daed028
pkg/calc: add transcendental constants to the default evaluation envi…
ripta Nov 28, 2025
564bc12
pkg/calc: implement sqrt
ripta Nov 28, 2025
8c89d36
pkg/calc: implement modulo
ripta Nov 28, 2025
684db06
pkg/calc: implement shift left and shift right operations
ripta Nov 29, 2025
06dc3a7
pkg/calc/parser: document the messy implementation of modulo and shif…
ripta Nov 29, 2025
6ac5075
pkg/calc: initial support for exponentiation
ripta Nov 29, 2025
0097ed0
pkg/calc: use text-formatting routines from constructive reals
ripta Nov 29, 2025
ef6a3bf
pkg/calc: add configurable decimal places and construction verbosity
ripta Nov 29, 2025
08c6d1f
pkg/calc: add configurable trailing zero formatting
ripta Nov 29, 2025
69b0007
pkg/calc: add test coverage on operations on fractions
ripta Nov 29, 2025
381966f
pkg/calc: use calculator decimal display digit to determine evaluatio…
ripta Nov 29, 2025
42d43c5
pkg/calc: provide a bit more context in unexpected token errors, and …
ripta Nov 29, 2025
a3f0f64
pkg/calc: initial implementation of tracing with strings
ripta Nov 29, 2025
b8511db
pkg/calc: add meta commands to change settings at runtime
ripta Nov 30, 2025
2453859
pkg/calc: centralize settings management
ripta Nov 30, 2025
2478cef
pkg/calc: experiment with generics for managing settings
ripta Nov 30, 2025
83188d8
Revert "pkg/calc: experiment with generics for managing settings"
ripta Nov 30, 2025
4ea5164
pkg/calc: add fuzzy matching to meta commands
ripta Nov 30, 2025
efcf400
pkg/calc: add support for evaluating expressions from stdin without tty
ripta Nov 30, 2025
c59aade
pkg/calc: implement .toggle meta command
ripta Nov 30, 2025
18e015e
pkg/calc: implement .save and .load to save and load workspace
ripta Nov 30, 2025
5ac20b2
pkg/calc: refactor line handling and expression evaluation across all…
ripta Nov 30, 2025
68476f9
pkg/calc: add fuzzy matching to settings
ripta Nov 30, 2025
855b058
pkg/calc: implement generic findByPrefix that replaces findMetaComman…
ripta Nov 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions cmd/calc/calc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package main

import (
"fmt"
"os"

"github.com/ripta/rt/pkg/calc"
"github.com/ripta/rt/pkg/version"
)

func main() {
cmd := calc.NewCommand()
cmd.AddCommand(version.NewCommand())

if err := cmd.Execute(); err != nil {
fmt.Fprintf(os.Stderr, "Error: %+v\n", err)
os.Exit(1)
}
}
8 changes: 8 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ toolchain go1.24.1
require (
github.com/BurntSushi/toml v1.5.0
github.com/containerd/console v1.0.5
github.com/elk-language/go-prompt v1.3.1
github.com/go-logfmt/logfmt v0.6.1
github.com/google/cel-go v0.26.1
github.com/gosuri/uilive v0.0.4
Expand All @@ -15,6 +16,7 @@ require (
github.com/mr-tron/base58 v1.2.0
github.com/r3labs/diff/v3 v3.0.2
github.com/ripta/hypercmd v0.5.0
github.com/ripta/reals v0.0.0-20251129121815-4fa2f223ded2
github.com/ripta/unihan v0.0.0-20250404091138-c307c698a880
github.com/spf13/cobra v1.10.1
github.com/spf13/pflag v1.0.10
Expand All @@ -23,6 +25,7 @@ require (
github.com/vmihailenco/msgpack/v5 v5.4.1
github.com/zclconf/go-cty v1.17.0
golang.org/x/crypto v0.45.0
golang.org/x/term v0.37.0
golang.org/x/text v0.31.0
golang.org/x/time v0.14.0
google.golang.org/protobuf v1.36.10
Expand All @@ -40,9 +43,14 @@ require (
github.com/google/go-cmp v0.7.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/mattn/go-tty v0.0.7 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/pkg/term v1.2.0-beta.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/stoewer/go-strcase v1.3.1 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect
Expand Down
18 changes: 18 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/elk-language/go-prompt v1.3.1 h1:p6CJNCKcPUwUB4vkIvlqQNzW7ScrBHHKfMdFyeoESbc=
github.com/elk-language/go-prompt v1.3.1/go.mod h1:u66CVjp31ldgU/Ok1q8fA2RUmy/a9ysdMj5IZckFWKg=
github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE=
github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
Expand All @@ -39,8 +41,14 @@ github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzh
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-tty v0.0.7 h1:KJ486B6qI8+wBO7kQxYgmmEFDaFEE96JMBQ7h400N8Q=
github.com/mattn/go-tty v0.0.7/go.mod h1:f2i5ZOvXBU/tCABmLmOfzLz9azMo5wdAaElRNnJKr+k=
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
Expand All @@ -49,14 +57,21 @@ github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU
github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
github.com/pkg/term v1.2.0-beta.2 h1:L3y/h2jkuBVFdWiJvNfYfKmzcCnILw7mJWm2JQuMppw=
github.com/pkg/term v1.2.0-beta.2/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/r3labs/diff/v3 v3.0.2 h1:yVuxAY1V6MeM4+HNur92xkS39kB/N+cFi2hMkY06BbA=
github.com/r3labs/diff/v3 v3.0.2/go.mod h1:Cy542hv0BAEmhDYWtGxXRQ4kqRsVIcEjG9gChUlTmkw=
github.com/ripta/hypercmd v0.5.0 h1:8wEZndeP/umK8xLgZD1aYOIsdWsxymweJSETnbF1Awo=
github.com/ripta/hypercmd v0.5.0/go.mod h1:nffU7nnFN8yU/PIHbN35UCE5q0FSnDJ6ev45SFEIZ48=
github.com/ripta/reals v0.0.0-20251129121815-4fa2f223ded2 h1:QWeZ/uw8S951/qJQzg+wBAOpFhUx7yVJxyPRZdjJmuI=
github.com/ripta/reals v0.0.0-20251129121815-4fa2f223ded2/go.mod h1:WErCt40puDDQdpVq8Hg1DzjB0svufA8WboSYG4BI2+E=
github.com/ripta/unihan v0.0.0-20250404091138-c307c698a880 h1:ZzDUYlZP/LHJmkh+PtgRZHEKa+eNVefq6YR8BnUCQ2I=
github.com/ripta/unihan v0.0.0-20250404091138-c307c698a880/go.mod h1:ZLBfCas48lym/27GOsyFjRo7OGejoGHzOTdUdoRtDqU=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
Expand Down Expand Up @@ -97,10 +112,13 @@ golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
Expand Down
Loading