Commit Graph

277 Commits

Author SHA1 Message Date
Philip Monk
4d0e77a6b2
dojo: add a better function printer
It's useful to know what a function takes and produces, so this changes the autocomplete type prettyprinter to emphasize those.  This also gives a nice syntax for molds.  Examples:

```
-----
add  {a/@ b/@} -> @
~zod:dojo> add
-----
term  * -> @tas
~zod:dojo> term
-----
sign-transaction  {tx/{nonce/@ud gas-price/@ud gas/@ud to/@ux value/@ud data/@ux chain-id/@ux} pk/@} -> @ux
~zod:dojo> sign-transaction🔑ethereum
-----
wind  {a/(* -> *) b/(* -> *)} -> * -> ?({$give p/*} {$pass p// q/*} {$slip p/*})
~zod:dojo> wind
```
2019-10-31 13:56:20 -07:00
Philip Monk
76b917f426
dojo: add tab completion
This is initial support for type-aware tab completion.  When you hit tab, it tries to complete the word you're in the middle of using a face or arm in the subject at that point in the code.  It also shows all possible matches and their associated types.  It's nearly instantaneous.  Notes:

- It advances to the longest common prefix, so if you hit tab on `ab` and the only possible results are `abcde` and `abcdz`, then it'll write `abcd` and print both out (with their types).

- If there are fewer than ten matches, it prints the type along with the face.  Printing types is too slow to use all the time, but with 10 it's essentially instantaneous.

- The match closest in the subject to you (i.e. smallest axis number) is displayed lowest (closest to your focus).

Examples below, where `<TAB>` represents me hitting tab while my cursor is at that position (the line with the `<TAB>` is not preserved in the actual output).

```
~zod:dojo> eth<TAB>
-----
ethereum        #t/<11.qcl {<3.ltb 27.ipf 7.ecf 36.uek 92.bjk 247.ows 51.mvt 126.xjf 41.mac 1.ane $141> <21.yeb 27.ipf 7.ecf 36.uek 92.bjk 247.ows 51.mvt 126.xjf 41.mac 1.ane $141>}>
ethereum-types  #t/<3.ltb 27.ipf 7.ecf 36.uek 92.bjk 247.ows 51.mvt 126.xjf 41.mac 1.ane $141>
~zod:dojo> ethereum
~zod:dojo> |=  zong=@ud  z<TAB>
-----
zing  #t/<1.dqs {* <126.xjf 41.mac 1.ane $141>}>
zap   #t/<1.iot {tub/{p/{p/@ud q/@ud} q/""} <1.rff {daf/@t <247.ows 51.mvt 126.xjf 41.mac 1.ane $141>}>}>
zuse  #t/$309
zong  #t/@ud
~zod:dojo> |=  zong=@ud  zo<TAB>
-----
zong  #t/@ud
~zod:dojo> |=  zong=@ud  zong
~zod:dojo> <TAB>
hoon-version
trel
quip
pole
unit
qual
lone
... about 600 more lines ...
unity
html
zuse
eny
now
our
~zod:dojo>
```

Functionally, this is in a state where I'd be comfortable shipping it.  It doesn't interfere with anything if you don't press tab, and it's perfectly OTA-able.  I do think its output is a little verbose, but that can be tuned over time as people try it and determine what feels good in practice.

Additional notes:

- There are plenty of similar systems for other languages, but my most direct inspiration is Idris's editor tools.  This is implemented for the dojo, but I actually want it in my editor, which is why the meat is all defind in a library.  I've only tested on dojo one-liners, so I don't know the performance on large blocks of code.

- The default type printer isn't great for this use case.  In particular,
	- Cores should not print anything about their context
  - The `#t/` should go away
  - If it looks like a gate, we should print its return value
  - Maybe special handling for molds, but if the above is done, then for example `bone` is  `* -> @ud`.

- The worst part about our wing ordering is that it really screws up tab completion.  You want to do `point.owner-address` instead of `owner-address.point` because that lets you type `point.ow<TAB>`.  I weakly prefer reading it how we do it now, but it's really not great.  You could do an (dojo-specific?) alternate syntax of `point;owner-address`; this is a simple transformation.

- Regardless of the above, this should handle the case where we're in the middle of defining a wing; it doesn't right now.

- When a variable is shadowed, we show both of them.  We should probably show the shadowed one with a `^`.

- We probably shouldn't print out hundreds of results.  Maybe just the closest 50 with ellipses.

- This gets you any face in your subject, regardless of whether its type is reasonable.  We could limit that some by copying the `gol` logic in mint, so that if the pseudo-backward-inference engine happens to know what type it should be, you can filter the tab results according to if they nest in that type.  This would be "strongly type-aware".
2019-10-30 23:19:25 -07:00
Jared Tobin
e77237d1a1
Revert "chat-hook: use sender's timestamp"
This reverts commit 22ddb712ff, which I
merged prematurely.  See later commentary in #1889.

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-29 15:20:28 +08:00
Fang
22ddb712ff
chat-hook: use sender's timestamp
No longer overwrite messages' timestamp on-receive, instead keeping whatever
timestamp was set by the sender.

This behavior matches that of the late Hall.
2019-10-27 13:43:26 +01:00
Isaac Visintainer
16364de935 publish: correctly set title and body when navigating with next/prev 2019-10-25 15:29:51 -07:00
Logan Allen
e06acb87be chat-ui: fix image previews from url types 2019-10-24 14:31:40 -07:00
Logan Allen
c8cca2f261 chat-js: make clicking a url message open in a new tab 2019-10-24 14:12:26 -07:00
Logan Allen
29fc32d11b chat-js: fix chat sorting and selection in sidebar 2019-10-24 14:04:48 -07:00
Fang
544d636701
chat-cli: minor code style fixes 2019-10-23 20:40:58 +02:00
Jared Tobin
3fddf99260
Merge branch 'claz-invites-newline' (#1846)
* claz-invites-newline:
  claz: do invite file reading in +read-invites
  claz: ignore empty lines in invites file

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-23 08:36:07 +08:00
Jared Tobin
095a0a155a
Merge branch 'publish-fixes' (#1865)
* publish-fixes:
  publish: auto-resubscribe on quit, crash on failed subscription
  publish: added permission logic to %serve and import flows

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-23 08:35:01 +08:00
Isaac Visintainer
0a5fcf8210 publish: auto-resubscribe on quit, crash on failed subscription 2019-10-22 10:18:34 -07:00
Isaac Visintainer
aed15a13b9 publish: added permission logic to %serve and import flows 2019-10-22 10:18:25 -07:00
Jared Tobin
71b27b0300
Merge branch 'pretty-userspace' (#1847)
* pretty-userspace:
  pills
  hoon: moves new pretty-printer back into userspace

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-22 10:12:05 +08:00
Fang
9ed582b9c4
claz: do invite file reading in +read-invites
Ensures we read out the invite file in a consistent way
2019-10-18 16:15:11 +02:00
Fang
10b2643a50
chat-cli: update prompt on ;join
Fixes #1841.
2019-10-18 15:04:34 +02:00
Joe Bryan
fa01bfb0a5 hoon: moves new pretty-printer back into userspace 2019-10-17 17:52:45 -07:00
Fang
f0a4bd0369
claz: ignore empty lines in invites file 2019-10-18 02:10:39 +02:00
Fang
bead92656c
publish: remove unused %disconnect card
It wasn't being used, and wasn't correct in the first place.

(You really want [%publish wire binding:eyre] here.)
2019-10-16 23:41:08 +02:00
Jared Tobin
1f8826a8ed
Merge branch 'la-tiscol-fix'
* la-tiscol-fix:
  chat: changed a =: to a =. to fix message storage bug

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-16 09:43:40 +04:00
Jared Tobin
3e44e5155e
Merge branch 'claz-checks' (#1822)
* claz-checks:
  claz: group state check arms together
  claz: factor asserts out of callsites
  claz: check pool sizes when inviting
  claz: check planet availability for %invites
  claz: print proper error messages

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-16 09:41:31 +04:00
Logan Allen
2871a964ba chat: changed a =: to a =. to fix message storage bug 2019-10-15 16:16:02 -07:00
Jared Tobin
4613264047
release: v0.9.0
Updates URBIT_VERSION, Landscape builds, and all pills.
2019-10-15 14:50:05 +04:00
Fang
a0145ff3db
claz: group state check arms together
In both core and flow. +run-checks sets the stage for future command
legitimacy checks.
2019-10-14 21:54:32 +02:00
Fang
8b37f5fe33
claz: factor asserts out of callsites
We now do them in the relevant functions instead, since we always want
to hard-fail on unexpected/erroneous responses.
2019-10-14 21:52:57 +02:00
Fang
a5564f2860
claz: check pool sizes when inviting 2019-10-14 20:19:17 +02:00
Fang
4a4b592afc
claz: check planet availability for %invites 2019-10-14 17:19:34 +02:00
Fang
8d3787328a
claz: print proper error messages 2019-10-14 16:03:12 +02:00
Jared Tobin
eaf0cfd995
Merge branch 'perm-hook' (#1818)
* perm-hook:
  permission-hook: style improvement
  apps: added permission hook and chat-view %join action

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-13 09:07:21 +04:00
Logan Allen
7f0ab1b8ab permission-hook: style improvement 2019-10-12 18:58:20 -07:00
Fang
9b079f6c83
claz: %single %send-point to correct contract
09cb5f2 added a %send-point call, which is meant to target the delegated sending
contract. For %invites batches, this was the case. Handling of %single, however,
still sent all calls to the ecliptic contract.

This looks at the call tag to determine the target contract.
2019-10-12 00:22:44 +02:00
Logan Allen
b12e305c9c apps: added permission hook and chat-view %join action 2019-10-11 14:09:30 -07:00
Jared Tobin
9d1b09c995
Merge branch 'chat-cli-glyphs' (#1816)
* chat-cli-glyphs:
  chat-cli: maintain sane glyph binding state
  chat-cli: support per-target glyph unbinding
  chat-cli: properly decode double-bound glyphs
  chat-cli: try not to double-bind glyphs

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-11 10:35:42 +04:00
Jared Tobin
3f4edb608d
Merge branch 'la-join' (#1815)
* la-join:
  js: Improved join UI and added support for paths with multiple elements

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-11 09:12:31 +04:00
Fang
4e963ff23a
chat-cli: maintain sane glyph binding state
This ensures that `binds` is updated to match overwrites in `bounds`.
2019-10-10 23:49:36 +02:00
Fang
31b7331e1e
chat-cli: support per-target glyph unbinding 2019-10-10 23:40:08 +02:00
Fang
e01d59ae4c
chat-cli: properly decode double-bound glyphs
Resolves glyph to most recently seen target.
2019-10-10 22:40:37 +02:00
Fang
cf24f4a80e
chat-cli: try not to double-bind glyphs
Try to use the default glyph.
If that is already in use, random available glyph.
If there's none available, the default glyph.
2019-10-10 22:38:36 +02:00
Logan Allen
84e143574a js: Improved join UI and added support for paths with multiple elements 2019-10-10 11:20:53 -07:00
Jared Tobin
990d357e0f
Merge branch 'claz-invites' (#1813)
* claz-invites:
  claz: Correct & complete comments

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-10 14:51:17 +04:00
Fang
fa4d1bba48
claz: Correct & complete comments 2019-10-10 11:31:05 +02:00
Jared Tobin
77af7aff72
Merge branch 'claz-invites' (#1809)
* claz-invites:
  claz: Implement batch invites
  keygen: Add ownership-from-ticket function

Signed-off-by: Jared Tobin <jared@tlon.io>
2019-10-10 10:47:59 +04:00
Fang
09cb5f2403
claz: Implement batch invites
For generating many sendPoint() transactions for the Delegated Sending
contract. Specify what ship to send the invites as, and a path to a file
containing lines of "~ship,~ticket,0xaddress".

Comes with a generator, |claz-invites, for generating such files, given
a star and a range of its children (and an output path).
2019-10-09 21:28:48 +02:00
Fang
79544a03d0
chat-hook: Improve reap printf readability 2019-10-09 15:30:26 +02:00
Fang
86f37ede6c
chat-cli: Remove prep printf 2019-10-09 15:04:51 +02:00
Fang
4dea1068b2
chat-cli: Add clarity 2019-10-09 00:06:39 +02:00
Fang
b7f1e9c578
Merge branch 'odyssey-wip' into odyssey-chat-cli 2019-10-08 23:32:57 +02:00
Fang
24859907aa
chat-cli: Cosmetic improvements
Better variable naming. Trailing newline.
2019-10-08 23:00:46 +02:00
Fang
e567de9c18
chat: Move eval logic out of /lib/chat-json
This allows us to always include the bowl when evaluating a code letter.
2019-10-08 22:44:20 +02:00
Fang
0da8e1efb3
chat-cli: Properly support deleting local chats
Since the current implementation of ;leave is silently destroying state
instead of unsubscribing, we disallow running ;leave on local chats and
provide an explicit ;delete instead.
2019-10-08 22:28:56 +02:00