Closed frans-snyders closed 1 year ago
Thanks for this bug.
Would you mind posting some example broken code? That would help us identify the case(s) that we can try to identify / report better errors for.
Also, are you using the latest version of @dataform/core
? It has upgraded support for reporting such errors.
I believer we are on the latest core: "@dataform/core": "1.19.0"
A) replicate non-error that should error
const SAIL = [1,2];
SAILS.forEach((view_item) => {});
This should error, because SAILS is not defined ... but somehow dataform only resolves/check JS in the includes root folder
only oncce the above JS is imported to the root via require() then the error shows up
B) I'll try replicate the "Cannot read property 'name' of undefined" error and post here
B) I tried to replicate the error ... but it seems that once copy the code to a new JS file, then the error system working again ... but just for the new file.
Screenshot of error in main code (includes/lkml_generate/_lkml_view):
Screenshot of error given for main code:
...
Copy-pasting the faulty code (all code in the JS file) into a different JS file, with the same path structure(includes/lkml_generate/test_2):
... so it seems like it's a dataform issue for resolving the error ... somehow making a new file re-initialises everything and then it detects the error.
PS. going back and "breaking" the original code after seeing the error in the copied code - results in the same "Cannot read property 'name' of undefined" error for the original code ... so somehow it's the fil/state itself
PPS. the "workaround" does not work for all cases...
I think the behaviour you're seeing here are artifacts of the way that Dataform and/or JavaScript "validate" code.
1) we won't through a compile error for invalid JavaScript until that JavaScript is actually executed - this is just the way that JavaScript (or any scripting language) works
2) a JS file will only be executed if (a) it is require()
d, or (b) it is in the top level includes
directory, which Dataform automatically requires
for all other code to use easily
@BenBirt - yes, that explains case A ... All code should be in require() if not in the root includes directory
Case B is still an issue.
Maybe it's possible to add a JS "OUTLINE" debug panel when editing JS - where the current JS file can be run ? and maybe add a console.log() function ;)
PS screen capture of case B https://ufile.io/9i629ilh (expires in 30 days)
Are you sure that case B isn't just happening because one of the files is require
d by other code (and thus executed), and the other file is not?
If you are sure that this isn't what's happening, if you have a simple reproduction case, that would be helpful.
Hi, as per screen capture it's not because of the required use... When trying to re-product the error, then the error-handling works for the newly pasted code - exact same code, just a different file name.
I'll keep trying to reproduce the error and see if some code results directly to the error "Cannot read property 'name' of undefined"
When developing in Javascript in Dataform, many times the error is "Compilation errors: Error: Cannot read property 'name' of undefined".
The error is generic and does not specify what file or what line of code is the problem. Something simple like having an extra comma in a JSON constant causes the error. Debugging this error means disabling code blocks, and re-activating them until the error occurs.
The error also does not come up until the JS file is surfaced ... so you can code in multiple files, and not receive and error, and then once you import the JS file into the root includes folder, then the error appears.
Suggestion: Add more detail on where the error occurred, and the context.