Comments (6)
Hi - this is an interesting topic. I briefly looked at this a while back for the jsonata exerciser, which uses CodeMirror for the editor panels. Although it wouldn't be part of the core jsonata runtime, a component that supports code completion would be a really useful addition, especially if written in a way that could be plugged into different editor frameworks.
It would be great if you are interested in working on this. I'm not familiar with peg.js, although I do have some experience with BNF grammars. However, the JSONata parser is not generated from a BNF grammar but rather hand coded using Pratt's top-down operator precedence algorithm (see here for an excellent description). The code for it is here and the relative operator precedences are defined here. I imagine a grammar could be derived from this. Let me know if you need anything.
from jsonata.
Hmm, as I expected, the code and operator precedences are a bit too off to make a grammar file from. That leaves me two options:
-
Modify the jsonata source particularly in the evaluateVariable and evaluateLiteral functions and somehow lookup the schemas from there. I have some experience building a code completion this way and found that it is quite intrusive:-(
-
Use the JMESpath grammar, which should be similar, add the missing pieces on top. Much less intrusive but unsure how to organize the output structuring.
Give me a hint if you have any of these sounds better.
Cheers
Martin
from jsonata.
I added a simple code completion that can be seen in this repo: github. The error messages are enhanced with a proposal object. Check out the tests.
It uses a framework object to decide how the proposals are used. In this case it is a json schema. Only the source has code completion, for target we can use a normal json schema tool, there are plenty of these.
Not all is there, we should have support both for variables and function parameters. However, I'm not sure how to extract the assigned variables. Same for the functions and then the function parameter types. Also the global variable should be addressed.
If someone could point out how to get the assigned variables and functions, then I could continue with the rest.
/Martin
from jsonata.
All variables are held in the environment
which is a stack of frame
objects created here:
https://github.com/jsonata-js/jsonata/blob/master/jsonata.js#L4048
This environment
is passed around the variable evaluate functions during expression evaluation.
The frames all link back to a global staticFrame
object which contains all the built in functions (note that functions are just variables that bind to function bodies). The frame object contains methods bind
and lookup
. We might need to add an entries
method to list all of the in-scope bindings in order to support what you need.
from jsonata.
Super! That should point me in the right direction. We would also have to deal with scopes and that can be a bit tricky... I'll see what makes sense.
from jsonata.
Closing this issue since I think there is no more work here. Re-open if you disagree.
from jsonata.
Related Issues (20)
- How to return the value from jsonata instead of promise/async HOT 3
- Dry run, return expected schema for a given input schema
- How to handle undefined value HOT 2
- $formatDateTime(millis, picture [, timezone]) and $parseDateTime(timestamp, picture) HOT 1
- Clarification : Is there Any Feature for Apply Break or Continue in Looping HOT 1
- parallel map
- switch case or if else
- Truthiness of numbers is completely random
- Help resolve current pinning to 1.8.6 for JSONata-Wrapper (possibly ducktape compatibility)
- Reserved Tokens Documentation
- ($.some_non_existent_key != 'anything') evaluates to false HOT 3
- $string(number) capped at precision-15
- Error handling and asynchronous behavior in evaluate function
- Rounding number without "Round half to even"
- There isn't a uuid() function for JSONata HOT 2
- Hard spaces in documentation not rendered correctly
- Security contact for JSONata HOT 4
- default query on try.jsonata.org HOT 1
- is 2.0.4 a fake release? HOT 4
- Multi-level JSON processing: Unwrapping Objects
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsonata.