PromucFlow_constructor/app/client/packages/ast/src/index.ts

1043 lines
33 KiB
TypeScript
Raw Normal View History

import type { Node, SourceLocation, Options, Comment } from "acorn";
import { parse } from "acorn";
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
import { ancestor, simple } from "acorn-walk";
import { ECMA_VERSION, NodeTypes } from "./constants";
fix: improve autocompletion hints discovery (#28222) ## Description This PR improves autocompletion hints discovery by - Taking entities' recency of usage into consideration when sorting hints - Showing entity names at the top, before supported functions and properties - Deprioritizing the Function constructor and the MainContainer entity #### PR fixes following issue(s) Fixes #27870 Fixes #17684 Fixes https://github.com/appsmithorg/appsmith/issues/24975 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration. > Delete anything that is not relevant - [ ] Manual - [ ] JUnit - [ ] Jest - [ ] Cypress > > #### Test Plan - [x] check for autocomplete results when multiple widgets of the same type are used - [x] check for entity renaming behavior - [x] verify function and mainContainer have been removed - [x] verify that recent entity changes affects autocomplete ranking > > #### Issues raised during DP testing https://github.com/appsmithorg/appsmith/pull/28222#issuecomment-1777487126 > > > ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [x] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [ ] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-10-25 17:18:45 +00:00
import { has, isFinite, isNil, isString, toPath } from "lodash";
import { getStringValue, isTrueObject, sanitizeScript } from "./utils";
import { jsObjectDeclaration } from "./jsObject";
import { attachComments } from "astravel";
import { generate } from "astring";
/*
* Valuable links:
*
* * ESTree spec: Javascript AST is called ESTree.
* Each es version has its md file in the repo to find features
* implemented and their node type
* https://github.com/estree/estree
*
* * Acorn: The parser we use to get the AST
* https://github.com/acornjs/acorn
*
* * Acorn walk: The walker we use to traverse the AST
* https://github.com/acornjs/acorn/tree/master/acorn-walk
*
* * AST Explorer: Helpful web tool to see ASTs and its parts
* https://astexplorer.net/
*
*/
chore: Compute default value for jsaction params (#34708) ## Description This PR adds the values to jsArguments. The logic for this is - If the value is string then it is kept as is - For non-strings they are wrapped with `{{ }}` do maintain the data type integrity when evaluated. This property is currently not used anywhere in the platform and this is intended to be used by js modules to identify the default values of parameters and provide support to alter then in a UI in the app. This PR also splits `workers/Evaluation/getJSActionForEvalContext.ts` to override in the EE for modules PR for https://github.com/appsmithorg/appsmith-ee/pull/4612 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9919551354> > Commit: c6ab372477fb3fd2f1ce171729af4fa64ac2a487 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9919551354&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Sat, 13 Jul 2024 12:16:08 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for additional node types (`RestElement`, `ObjectPattern`, `ArrayPattern`) in our AST processing. - Introduced `addPropertiesToJSObjectCode` function to enhance JavaScript object property management. - **Updates** - Enhanced `myFun2` function with new parameters and default values to improve flexibility and usage. - Improved `parseJSObject` function with additional parameters for better functionality. - **Tests** - Added a new test suite for `addPropertiesToJSObjectCode` function to ensure robust property management in JavaScript objects. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-07-15 15:31:42 +00:00
type Pattern =
| IdentifierNode
| AssignmentPatternNode
| ArrayPatternNode
| ObjectPatternNode
| RestElementNode;
type Expression = Node;
export type ArgumentTypes =
| LiteralNode
| ArrowFunctionExpressionNode
| ObjectExpression
| MemberExpressionNode
| CallExpressionNode
| BinaryExpressionNode
| BlockStatementNode
| IdentifierNode;
// doc: https://github.com/estree/estree/blob/master/es5.md#memberexpression
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export interface MemberExpressionNode extends Node {
type: NodeTypes.MemberExpression;
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
object: MemberExpressionNode | IdentifierNode | CallExpressionNode;
property: IdentifierNode | LiteralNode;
computed: boolean;
// doc: https://github.com/estree/estree/blob/master/es2020.md#chainexpression
optional?: boolean;
}
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export interface BinaryExpressionNode extends Node {
type: NodeTypes.BinaryExpression;
left: BinaryExpressionNode | IdentifierNode;
right: BinaryExpressionNode | IdentifierNode;
}
// doc: https://github.com/estree/estree/blob/master/es5.md#identifier
feat: show lint errors in async functions bound to sync fields (#21187) ## Description This PR improves the error resolution journey for users. Lint warnings are added to async JS functions which are bound to data fields (sync fields). - JSObjects are "linted" by individual properties (as opposed to being "linted" as a whole) - Only edited jsobject properties get "linted", improving jsObject linting by ~35%.(This largely depends on the size of the JSObject) <img width="500" alt="Screenshot 2023-04-03 at 11 17 45" src="https://user-images.githubusercontent.com/46670083/229482424-233f3950-ffec-46f5-8c42-680dff6a412f.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 26 00" src="https://user-images.githubusercontent.com/46670083/224975572-b2d8d404-aac6-43fb-be14-20edf7c56117.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 41 11" src="https://user-images.githubusercontent.com/46670083/224975952-c40848b1-69d8-489d-9b62-24127ea1a2f1.png"> Fixes #20289 Fixes #20008 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - CYPRESS - JEST ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-03 10:41:15 +00:00
export interface IdentifierNode extends Node {
type: NodeTypes.Identifier;
name: string;
}
chore: Compute default value for jsaction params (#34708) ## Description This PR adds the values to jsArguments. The logic for this is - If the value is string then it is kept as is - For non-strings they are wrapped with `{{ }}` do maintain the data type integrity when evaluated. This property is currently not used anywhere in the platform and this is intended to be used by js modules to identify the default values of parameters and provide support to alter then in a UI in the app. This PR also splits `workers/Evaluation/getJSActionForEvalContext.ts` to override in the EE for modules PR for https://github.com/appsmithorg/appsmith-ee/pull/4612 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9919551354> > Commit: c6ab372477fb3fd2f1ce171729af4fa64ac2a487 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9919551354&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Sat, 13 Jul 2024 12:16:08 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for additional node types (`RestElement`, `ObjectPattern`, `ArrayPattern`) in our AST processing. - Introduced `addPropertiesToJSObjectCode` function to enhance JavaScript object property management. - **Updates** - Enhanced `myFun2` function with new parameters and default values to improve flexibility and usage. - Improved `parseJSObject` function with additional parameters for better functionality. - **Tests** - Added a new test suite for `addPropertiesToJSObjectCode` function to ensure robust property management in JavaScript objects. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-07-15 15:31:42 +00:00
export interface ArrayPatternNode extends Node {
type: NodeTypes.ArrayPattern;
elements: Array<Pattern | null>;
}
export interface AssignmentProperty extends Node {
type: NodeTypes.Property;
key: Expression;
value: Pattern;
kind: "init";
method: false;
shorthand: boolean;
computed: boolean;
}
export interface RestElementNode extends Node {
type: NodeTypes.RestElement;
argument: Pattern;
}
export interface ObjectPatternNode extends Node {
type: NodeTypes.ObjectPattern;
properties: Array<AssignmentProperty | RestElementNode>;
}
//Using this to handle the Variable property refactor
interface RefactorIdentifierNode extends Node {
type: NodeTypes.Identifier;
name: string;
property?: IdentifierNode;
}
// doc: https://github.com/estree/estree/blob/master/es5.md#variabledeclarator
interface VariableDeclaratorNode extends Node {
type: NodeTypes.VariableDeclarator;
id: IdentifierNode;
init: Expression | null;
}
// doc: https://github.com/estree/estree/blob/master/es5.md#functions
interface Function extends Node {
id: IdentifierNode | null;
params: Pattern[];
}
// doc: https://github.com/estree/estree/blob/master/es5.md#functiondeclaration
interface FunctionDeclarationNode extends Node, Function {
type: NodeTypes.FunctionDeclaration;
}
// doc: https://github.com/estree/estree/blob/master/es5.md#functionexpression
interface FunctionExpressionNode extends Expression, Function {
type: NodeTypes.FunctionExpression;
feat: show lint errors in async functions bound to sync fields (#21187) ## Description This PR improves the error resolution journey for users. Lint warnings are added to async JS functions which are bound to data fields (sync fields). - JSObjects are "linted" by individual properties (as opposed to being "linted" as a whole) - Only edited jsobject properties get "linted", improving jsObject linting by ~35%.(This largely depends on the size of the JSObject) <img width="500" alt="Screenshot 2023-04-03 at 11 17 45" src="https://user-images.githubusercontent.com/46670083/229482424-233f3950-ffec-46f5-8c42-680dff6a412f.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 26 00" src="https://user-images.githubusercontent.com/46670083/224975572-b2d8d404-aac6-43fb-be14-20edf7c56117.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 41 11" src="https://user-images.githubusercontent.com/46670083/224975952-c40848b1-69d8-489d-9b62-24127ea1a2f1.png"> Fixes #20289 Fixes #20008 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - CYPRESS - JEST ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-03 10:41:15 +00:00
async: boolean;
}
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export interface ArrowFunctionExpressionNode extends Expression, Function {
type: NodeTypes.ArrowFunctionExpression;
feat: show lint errors in async functions bound to sync fields (#21187) ## Description This PR improves the error resolution journey for users. Lint warnings are added to async JS functions which are bound to data fields (sync fields). - JSObjects are "linted" by individual properties (as opposed to being "linted" as a whole) - Only edited jsobject properties get "linted", improving jsObject linting by ~35%.(This largely depends on the size of the JSObject) <img width="500" alt="Screenshot 2023-04-03 at 11 17 45" src="https://user-images.githubusercontent.com/46670083/229482424-233f3950-ffec-46f5-8c42-680dff6a412f.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 26 00" src="https://user-images.githubusercontent.com/46670083/224975572-b2d8d404-aac6-43fb-be14-20edf7c56117.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 41 11" src="https://user-images.githubusercontent.com/46670083/224975952-c40848b1-69d8-489d-9b62-24127ea1a2f1.png"> Fixes #20289 Fixes #20008 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - CYPRESS - JEST ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-03 10:41:15 +00:00
async: boolean;
}
export interface ObjectExpression extends Expression {
type: NodeTypes.ObjectExpression;
properties: Array<PropertyNode>;
}
// doc: https://github.com/estree/estree/blob/master/es2015.md#assignmentpattern
interface AssignmentPatternNode extends Node {
type: NodeTypes.AssignmentPattern;
left: Pattern;
chore: Compute default value for jsaction params (#34708) ## Description This PR adds the values to jsArguments. The logic for this is - If the value is string then it is kept as is - For non-strings they are wrapped with `{{ }}` do maintain the data type integrity when evaluated. This property is currently not used anywhere in the platform and this is intended to be used by js modules to identify the default values of parameters and provide support to alter then in a UI in the app. This PR also splits `workers/Evaluation/getJSActionForEvalContext.ts` to override in the EE for modules PR for https://github.com/appsmithorg/appsmith-ee/pull/4612 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9919551354> > Commit: c6ab372477fb3fd2f1ce171729af4fa64ac2a487 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9919551354&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Sat, 13 Jul 2024 12:16:08 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for additional node types (`RestElement`, `ObjectPattern`, `ArrayPattern`) in our AST processing. - Introduced `addPropertiesToJSObjectCode` function to enhance JavaScript object property management. - **Updates** - Enhanced `myFun2` function with new parameters and default values to improve flexibility and usage. - Improved `parseJSObject` function with additional parameters for better functionality. - **Tests** - Added a new test suite for `addPropertiesToJSObjectCode` function to ensure robust property management in JavaScript objects. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-07-15 15:31:42 +00:00
right: ArgumentTypes;
}
// doc: https://github.com/estree/estree/blob/master/es5.md#literal
feat: show lint errors in async functions bound to sync fields (#21187) ## Description This PR improves the error resolution journey for users. Lint warnings are added to async JS functions which are bound to data fields (sync fields). - JSObjects are "linted" by individual properties (as opposed to being "linted" as a whole) - Only edited jsobject properties get "linted", improving jsObject linting by ~35%.(This largely depends on the size of the JSObject) <img width="500" alt="Screenshot 2023-04-03 at 11 17 45" src="https://user-images.githubusercontent.com/46670083/229482424-233f3950-ffec-46f5-8c42-680dff6a412f.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 26 00" src="https://user-images.githubusercontent.com/46670083/224975572-b2d8d404-aac6-43fb-be14-20edf7c56117.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 41 11" src="https://user-images.githubusercontent.com/46670083/224975952-c40848b1-69d8-489d-9b62-24127ea1a2f1.png"> Fixes #20289 Fixes #20008 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - CYPRESS - JEST ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-03 10:41:15 +00:00
export interface LiteralNode extends Node {
type: NodeTypes.Literal;
value: string | boolean | null | number | RegExp;
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
raw: string;
}
export interface CallExpressionNode extends Node {
type: NodeTypes.CallExpression;
callee: CallExpressionNode | IdentifierNode | MemberExpressionNode;
arguments: ArgumentTypes[];
}
feat: peek overlay nested properties + perf improvements (#23414) Fixes #23057 Fixes #23054 ## Description TL;DR Added support for peeking on nested properties. e.g. `Api1.data[0].id`. This won't work when: - local variables are involved in the expression. e.g. `Api1.data[x].id` won't support peeking at the variable `[x]` or anything after that. - library code is involved e.g. `moment`, `_` etc... - when functions are called. e.g. Api1.data[0].id.toFixed() Because these cases requires evaluation. <img width="355" alt="image" src="https://github.com/appsmithorg/appsmith/assets/66776129/d09d1f0d-1692-46f5-8ec1-592f4fe75f7a"> #### Media (old vs new) https://www.loom.com/share/dedcf113439c4ee2a19028acca54045e ## Performance improvements: - Use AST to identify expressions instead marking text manually. - This reduces the number of markers we process (~ half). - Before ![image](https://github.com/appsmithorg/appsmith/assets/66776129/bb16ac6b-46dd-4e39-8524-e4f4fa2c3243) - After ![image](https://github.com/appsmithorg/appsmith/assets/66776129/28f0f209-5437-4718-a74a-f025c576afda) - AST logs https://www.loom.com/share/ddde93233cc8470ea04309d8a8332240 #### Type of change - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? - [x] Manual - [x] Jest - [x] Cypress > > #### Test Plan https://github.com/appsmithorg/TestSmith/issues/2402 #### Issues raised during DP testing https://github.com/appsmithorg/appsmith/pull/23414#issuecomment-1553164908 ## Checklist: #### Dev activity - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [x] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Test-plan-implementation#speedbreaker-features-to-consider-for-every-change) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans/_edit#areas-of-interest) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-05-26 11:42:10 +00:00
// https://github.com/estree/estree/blob/master/es5.md#thisexpression
export interface ThisExpressionNode extends Expression {
type: "ThisExpression";
}
// https://github.com/estree/estree/blob/master/es5.md#conditionalexpression
export interface ConditionalExpressionNode extends Expression {
type: "ConditionalExpression";
test: Expression;
alternate: Expression;
consequent: Expression;
}
// https://github.com/estree/estree/blob/master/es2017.md#awaitexpression
export interface AwaitExpressionNode extends Expression {
type: "AwaitExpression";
argument: Expression;
}
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export interface BlockStatementNode extends Node {
type: "BlockStatement";
body: [Node];
}
interface NodeList {
references: Set<string>;
functionalParams: Set<string>;
variableDeclarations: Set<string>;
identifierList: Array<IdentifierNode>;
}
// https://github.com/estree/estree/blob/master/es5.md#property
export interface PropertyNode extends Node {
type: NodeTypes.Property;
key: LiteralNode | IdentifierNode;
value: Node;
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
kind: "init" | "get" | "set";
}
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export interface ExpressionStatement extends Node {
type: "ExpressionStatement";
expression: Expression;
}
export interface Program extends Node {
type: "Program";
body: [Directive | Statement];
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
}
export type Statement = Node;
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export interface Directive extends ExpressionStatement {
expression: LiteralNode;
directive: string;
}
feat: show lint errors in async functions bound to sync fields (#21187) ## Description This PR improves the error resolution journey for users. Lint warnings are added to async JS functions which are bound to data fields (sync fields). - JSObjects are "linted" by individual properties (as opposed to being "linted" as a whole) - Only edited jsobject properties get "linted", improving jsObject linting by ~35%.(This largely depends on the size of the JSObject) <img width="500" alt="Screenshot 2023-04-03 at 11 17 45" src="https://user-images.githubusercontent.com/46670083/229482424-233f3950-ffec-46f5-8c42-680dff6a412f.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 26 00" src="https://user-images.githubusercontent.com/46670083/224975572-b2d8d404-aac6-43fb-be14-20edf7c56117.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 41 11" src="https://user-images.githubusercontent.com/46670083/224975952-c40848b1-69d8-489d-9b62-24127ea1a2f1.png"> Fixes #20289 Fixes #20008 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - CYPRESS - JEST ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-03 10:41:15 +00:00
export interface ExportDefaultDeclarationNode extends Node {
declaration: Node;
}
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
// Node with location details
feat: show lint errors in async functions bound to sync fields (#21187) ## Description This PR improves the error resolution journey for users. Lint warnings are added to async JS functions which are bound to data fields (sync fields). - JSObjects are "linted" by individual properties (as opposed to being "linted" as a whole) - Only edited jsobject properties get "linted", improving jsObject linting by ~35%.(This largely depends on the size of the JSObject) <img width="500" alt="Screenshot 2023-04-03 at 11 17 45" src="https://user-images.githubusercontent.com/46670083/229482424-233f3950-ffec-46f5-8c42-680dff6a412f.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 26 00" src="https://user-images.githubusercontent.com/46670083/224975572-b2d8d404-aac6-43fb-be14-20edf7c56117.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 41 11" src="https://user-images.githubusercontent.com/46670083/224975952-c40848b1-69d8-489d-9b62-24127ea1a2f1.png"> Fixes #20289 Fixes #20008 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - CYPRESS - JEST ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-03 10:41:15 +00:00
export type NodeWithLocation<NodeType> = NodeType & {
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
loc: SourceLocation;
};
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
type AstOptions = Omit<Options, "ecmaVersion">;
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
interface EntityRefactorResponse {
isSuccess: boolean;
body: { script: string; refactorCount: number } | { error: string };
}
/* We need these functions to typescript casts the nodes with the correct types */
export const isIdentifierNode = (node: Node): node is IdentifierNode => {
return node.type === NodeTypes.Identifier;
};
export const isMemberExpressionNode = (
node: Node,
): node is MemberExpressionNode => {
return node.type === NodeTypes.MemberExpression;
};
feat: peek overlay nested properties + perf improvements (#23414) Fixes #23057 Fixes #23054 ## Description TL;DR Added support for peeking on nested properties. e.g. `Api1.data[0].id`. This won't work when: - local variables are involved in the expression. e.g. `Api1.data[x].id` won't support peeking at the variable `[x]` or anything after that. - library code is involved e.g. `moment`, `_` etc... - when functions are called. e.g. Api1.data[0].id.toFixed() Because these cases requires evaluation. <img width="355" alt="image" src="https://github.com/appsmithorg/appsmith/assets/66776129/d09d1f0d-1692-46f5-8ec1-592f4fe75f7a"> #### Media (old vs new) https://www.loom.com/share/dedcf113439c4ee2a19028acca54045e ## Performance improvements: - Use AST to identify expressions instead marking text manually. - This reduces the number of markers we process (~ half). - Before ![image](https://github.com/appsmithorg/appsmith/assets/66776129/bb16ac6b-46dd-4e39-8524-e4f4fa2c3243) - After ![image](https://github.com/appsmithorg/appsmith/assets/66776129/28f0f209-5437-4718-a74a-f025c576afda) - AST logs https://www.loom.com/share/ddde93233cc8470ea04309d8a8332240 #### Type of change - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? - [x] Manual - [x] Jest - [x] Cypress > > #### Test Plan https://github.com/appsmithorg/TestSmith/issues/2402 #### Issues raised during DP testing https://github.com/appsmithorg/appsmith/pull/23414#issuecomment-1553164908 ## Checklist: #### Dev activity - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [x] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Test-plan-implementation#speedbreaker-features-to-consider-for-every-change) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans/_edit#areas-of-interest) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-05-26 11:42:10 +00:00
export const isThisExpressionNode = (
node: Node,
): node is ThisExpressionNode => {
return node.type === NodeTypes.ThisExpression;
};
export const isConditionalExpressionNode = (
node: Node,
): node is ConditionalExpressionNode =>
node.type === NodeTypes.ConditionalExpression;
export const isAwaitExpressionNode = (
node: Node,
): node is AwaitExpressionNode => node.type === NodeTypes.AwaitExpression;
export const isBinaryExpressionNode = (
node: Node,
): node is BinaryExpressionNode => {
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
return node.type === NodeTypes.BinaryExpression;
};
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export const isVariableDeclarator = (
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
node: Node,
): node is VariableDeclaratorNode => {
return node.type === NodeTypes.VariableDeclarator;
};
const isFunctionDeclaration = (node: Node): node is FunctionDeclarationNode => {
return node.type === NodeTypes.FunctionDeclaration;
};
const isFunctionExpression = (node: Node): node is FunctionExpressionNode => {
return node.type === NodeTypes.FunctionExpression;
};
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export const isArrowFunctionExpression = (
node: Node,
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
): node is ArrowFunctionExpressionNode => {
return node.type === NodeTypes.ArrowFunctionExpression;
};
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
export const isAssignmentExpression = (
node: Node,
): node is AssignmentExpressionNode => {
return node.type === NodeTypes.AssignmentExpression;
};
export const isObjectExpression = (node: Node): node is ObjectExpression => {
return node.type === NodeTypes.ObjectExpression;
};
const isAssignmentPatternNode = (node: Node): node is AssignmentPatternNode => {
return node.type === NodeTypes.AssignmentPattern;
};
chore: Compute default value for jsaction params (#34708) ## Description This PR adds the values to jsArguments. The logic for this is - If the value is string then it is kept as is - For non-strings they are wrapped with `{{ }}` do maintain the data type integrity when evaluated. This property is currently not used anywhere in the platform and this is intended to be used by js modules to identify the default values of parameters and provide support to alter then in a UI in the app. This PR also splits `workers/Evaluation/getJSActionForEvalContext.ts` to override in the EE for modules PR for https://github.com/appsmithorg/appsmith-ee/pull/4612 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9919551354> > Commit: c6ab372477fb3fd2f1ce171729af4fa64ac2a487 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9919551354&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Sat, 13 Jul 2024 12:16:08 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for additional node types (`RestElement`, `ObjectPattern`, `ArrayPattern`) in our AST processing. - Introduced `addPropertiesToJSObjectCode` function to enhance JavaScript object property management. - **Updates** - Enhanced `myFun2` function with new parameters and default values to improve flexibility and usage. - Improved `parseJSObject` function with additional parameters for better functionality. - **Tests** - Added a new test suite for `addPropertiesToJSObjectCode` function to ensure robust property management in JavaScript objects. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-07-15 15:31:42 +00:00
export const isArrayPatternNode = (node: Node): node is ArrayPatternNode => {
return node.type === NodeTypes.ArrayPattern;
};
export const isObjectPatternNode = (node: Node): node is ObjectPatternNode => {
return node.type === NodeTypes.ObjectPattern;
};
export const isRestElementNode = (node: Node): node is RestElementNode => {
return node.type === NodeTypes.RestElement;
};
export const isLiteralNode = (node: Node): node is LiteralNode => {
return node.type === NodeTypes.Literal;
};
export const isPropertyNode = (node: Node): node is PropertyNode => {
return node.type === NodeTypes.Property;
};
export const isCallExpressionNode = (
node: Node,
): node is CallExpressionNode => {
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
return node.type === NodeTypes.CallExpression;
};
export const isBlockStatementNode = (
node: Node,
): node is BlockStatementNode => {
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
return node.type === NodeTypes.BlockStatement;
};
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export const isExpressionStatementNode = (
node: Node,
): node is ExpressionStatement => {
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
return node.type === NodeTypes.ExpressionStatement;
};
feat: show lint errors in async functions bound to sync fields (#21187) ## Description This PR improves the error resolution journey for users. Lint warnings are added to async JS functions which are bound to data fields (sync fields). - JSObjects are "linted" by individual properties (as opposed to being "linted" as a whole) - Only edited jsobject properties get "linted", improving jsObject linting by ~35%.(This largely depends on the size of the JSObject) <img width="500" alt="Screenshot 2023-04-03 at 11 17 45" src="https://user-images.githubusercontent.com/46670083/229482424-233f3950-ffec-46f5-8c42-680dff6a412f.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 26 00" src="https://user-images.githubusercontent.com/46670083/224975572-b2d8d404-aac6-43fb-be14-20edf7c56117.png"> <img width="500" alt="Screenshot 2023-03-14 at 11 41 11" src="https://user-images.githubusercontent.com/46670083/224975952-c40848b1-69d8-489d-9b62-24127ea1a2f1.png"> Fixes #20289 Fixes #20008 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - CYPRESS - JEST ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-03 10:41:15 +00:00
export const isExportDefaultDeclarationNode = (
node: Node,
): node is ExportDefaultDeclarationNode => {
return node.type === NodeTypes.ExportDefaultDeclaration;
};
export const isPropertyAFunctionNode = (
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
node: Node,
): node is ArrowFunctionExpressionNode | FunctionExpressionNode => {
return (
node.type === NodeTypes.ArrowFunctionExpression ||
node.type === NodeTypes.FunctionExpression
);
};
const isArrayAccessorNode = (node: Node): node is MemberExpressionNode => {
return (
isMemberExpressionNode(node) &&
node.computed &&
isLiteralNode(node.property) &&
isFinite(node.property.value)
);
};
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export const wrapCode = (code: string) => {
return `
(function() {
return ${code}
})
`;
};
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
//Tech-debt: should upgrade this to better logic
//Used slice for a quick resolve of critical bug
const unwrapCode = (code: string) => {
const unwrapedCode = code.slice(32);
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
return unwrapedCode.slice(0, -10);
};
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
const getFunctionalParamNamesFromNode = (
node:
| FunctionDeclarationNode
| FunctionExpressionNode
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
| ArrowFunctionExpressionNode,
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
) => {
return Array.from(getFunctionalParamsFromNode(node)).map(
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
(functionalParam) => functionalParam.paramName,
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
);
};
// Memoize the ast generation code to improve performance.
// Since this will be used by both the server and the client, we want to prevent regeneration of ast
// for the the same code snippet
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
export const getAST = (code: string, options?: AstOptions) =>
parse(code, { ...options, ecmaVersion: ECMA_VERSION });
export const attachCommentsToAst = (
ast: Node,
commentArray: Array<Comment>,
) => {
feat: Action selector (#21582) ## Description Replaces the old boring action selector dropdown with a much more sophisticated UI that is capable of going above and beyond. Users with an aversion to code can now build their more complex workflows with a click of a few buttons. Consider this code snippet ```javascript Api1.run(() => { showAlert("Hello"); navigateTo('Page1', {}, 'SAME_WINDOW'); }, () => { removeValue("test"); }); ``` |**Old action selector** |**New action selector**| |:-:|:-:| |<img width="250" alt="Screenshot 2023-03-29 at 16 54 14" src="https://user-images.githubusercontent.com/32433245/228520661-a639b580-8986-4aec-a0f5-e2786d1a0f56.png">| <img width="250" alt="Screenshot 2023-03-29 at 16 55 15" src="https://user-images.githubusercontent.com/32433245/228521043-5025aa42-af95-4574-b586-bc4c721240bc.png">| **Click on an action block to edit its parameters.** <img width="500" alt="Screenshot 2023-03-29 at 17 01 18" src="https://user-images.githubusercontent.com/32433245/228522479-493769d0-9d2c-4b67-b493-a79e3bb9c947.png"> **Switch to JS mode to get the raw code** <img width="273" alt="Screenshot 2023-03-29 at 17 05 51" src="https://user-images.githubusercontent.com/32433245/228523458-13bc0302-4c94-4176-b5aa-3ec208122f57.png"> ### Code changes **New UI components** - ActionCreator component splits the code into block statements. - Each block statement is represented by ActionTree.tsx UI component. - ActionTree.tsx represents an action and its chains. - ActionCard.tsx is the block that represents the individual action on the UI. - ActionSelector.tsx component is popover that contains the form for editing individual action. - TabView, TextView, SelectorView, ActionSelectorView and KeyValueView are components that represent configurable fields in ActionSelector form. **AST methods** - Added methods to get/set function names, expressions, arguments. - Added methods to get/set then/catch blocks to allow chaining of actions. - Added methods to check if code is convertible to UI. Fixes #10160 Fixes #21588 Fixes #21392 Fixes #21393 Fixes #7903 Fixes #15895 Fixes #17765 Fixes #14562 Depends on https://github.com/appsmithorg/design-system/pull/306 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan https://github.com/appsmithorg/TestSmith/issues/2296 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [x] Cypress test cases have been added and approved by either SDET or manual QA - [x] Organized project review call with relevant stakeholders after Round 1/2 of QA - [x] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Rimil Dey <rimil@appsmith.com> Co-authored-by: arunvjn <arun@appsmith.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2023-04-06 16:49:12 +00:00
return attachComments(ast, commentArray);
};
/**
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
* An AST based extractor that fetches all possible references in a given
* piece of code. We use this to get any references to the global entities in Appsmith
* and create dependencies on them. If the reference was updated, the given piece of code
* should run again.
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
* @param code: The piece of script where references need to be extracted from
*/
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
export interface IdentifierInfo {
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
references: string[];
functionalParams: string[];
variables: string[];
}
export const extractIdentifierInfoFromCode = (
code: string,
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
evaluationVersion: number,
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
invalidIdentifiers?: Record<string, unknown>,
): IdentifierInfo => {
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
let ast: Node = { end: 0, start: 0, type: "" };
try {
const sanitizedScript = sanitizeScript(code, evaluationVersion);
/* wrapCode - Wrapping code in a function, since all code/script get wrapped with a function during evaluation.
Some syntax won't be valid unless they're at the RHS of a statement.
Since we're assigning all code/script to RHS during evaluation, we do the same here.
So that during ast parse, those errors are neglected.
*/
/* e.g. IIFE without braces
function() { return 123; }() -> is invalid
let result = function() { return 123; }() -> is valid
*/
const wrappedCode = wrapCode(sanitizedScript);
ast = getAST(wrappedCode);
const { functionalParams, references, variableDeclarations }: NodeList =
ancestorWalk(ast);
const referencesArr = Array.from(references).filter((reference) => {
// To remove references derived from declared variables and function params,
// We extract the topLevelIdentifier Eg. Api1.name => Api1
const topLevelIdentifier = toPath(reference)[0];
return !(
functionalParams.has(topLevelIdentifier) ||
variableDeclarations.has(topLevelIdentifier) ||
has(invalidIdentifiers, topLevelIdentifier)
);
});
return {
references: referencesArr,
functionalParams: Array.from(functionalParams),
variables: Array.from(variableDeclarations),
};
} catch (e) {
if (e instanceof SyntaxError) {
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
// Syntax error. Ignore and return empty list
return {
references: [],
functionalParams: [],
variables: [],
};
}
throw e;
}
};
export const entityRefactorFromCode = (
script: string,
oldName: string,
newName: string,
isJSObject: boolean,
evaluationVersion: number,
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
invalidIdentifiers?: Record<string, unknown>,
): EntityRefactorResponse => {
//Sanitizing leads to removal of special charater.
//Hence we are not sanatizing the script. Fix(#18492)
//If script is a JSObject then replace export default to decalartion.
if (isJSObject) script = jsObjectToCode(script);
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
else script = wrapCode(script);
let ast: Node = { end: 0, start: 0, type: "" };
//Copy of script to refactor
let refactorScript = script;
//Difference in length of oldName and newName
const nameLengthDiff: number = newName.length - oldName.length;
//Offset index used for deciding location of oldName.
let refactorOffset = 0;
//Count of refactors on the script
let refactorCount = 0;
try {
ast = getAST(script);
const {
functionalParams,
identifierList,
references,
variableDeclarations,
}: NodeList = ancestorWalk(ast);
const identifierArray = Array.from(
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
identifierList,
) as Array<RefactorIdentifierNode>;
//To handle if oldName has property ("JSObject.myfunc")
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
const oldNameArr = oldName.split(".");
const referencesArr = Array.from(references).filter((reference) => {
// To remove references derived from declared variables and function params,
// We extract the topLevelIdentifier Eg. Api1.name => Api1
const topLevelIdentifier = toPath(reference)[0];
return !(
functionalParams.has(topLevelIdentifier) ||
variableDeclarations.has(topLevelIdentifier) ||
has(invalidIdentifiers, topLevelIdentifier)
);
});
//Traverse through all identifiers in the script
identifierArray.forEach((identifier) => {
if (identifier.name === oldNameArr[0]) {
let index = 0;
while (index < referencesArr.length) {
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
if (identifier.name === referencesArr[index].split(".")[0]) {
//Replace the oldName by newName
//Get start index from node and get subarray from index 0 till start
//Append above with new name
//Append substring from end index from the node till end of string
//Offset variable is used to alter the position based on `refactorOffset`
//In case of nested JS action get end postion fro the property.
///Default end index
let endIndex = identifier.end;
const propertyNode = identifier.property;
//Flag variable : true if property should be updated
//false if property should not be updated
const propertyCondFlag =
oldNameArr.length > 1 &&
propertyNode &&
oldNameArr[1] === propertyNode.name;
//Condition to validate if Identifier || Property should be updated??
if (oldNameArr.length === 1 || propertyCondFlag) {
//Condition to extend end index in case of property match
if (propertyCondFlag && propertyNode) {
endIndex = propertyNode.end;
}
refactorScript =
refactorScript.substring(0, identifier.start + refactorOffset) +
newName +
refactorScript.substring(endIndex + refactorOffset);
refactorOffset += nameLengthDiff;
++refactorCount;
//We are only looking for one match in refrence for the identifier name.
break;
}
}
index++;
}
}
});
//If script is a JSObject then revert decalartion to export default.
if (isJSObject) refactorScript = jsCodeToObject(refactorScript);
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
else refactorScript = unwrapCode(refactorScript);
return {
isSuccess: true,
body: { script: refactorScript, refactorCount },
};
} catch (e) {
if (e instanceof SyntaxError) {
// Syntax error. Ignore and return empty list
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
return { isSuccess: false, body: { error: "Syntax Error" } };
}
throw e;
}
};
export interface functionParam {
paramName: string;
defaultValue: unknown;
}
export const getFunctionalParamsFromNode = (
node:
| FunctionDeclarationNode
| FunctionExpressionNode
| ArrowFunctionExpressionNode,
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
needValue = false,
chore: Compute default value for jsaction params (#34708) ## Description This PR adds the values to jsArguments. The logic for this is - If the value is string then it is kept as is - For non-strings they are wrapped with `{{ }}` do maintain the data type integrity when evaluated. This property is currently not used anywhere in the platform and this is intended to be used by js modules to identify the default values of parameters and provide support to alter then in a UI in the app. This PR also splits `workers/Evaluation/getJSActionForEvalContext.ts` to override in the EE for modules PR for https://github.com/appsmithorg/appsmith-ee/pull/4612 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9919551354> > Commit: c6ab372477fb3fd2f1ce171729af4fa64ac2a487 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9919551354&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Sat, 13 Jul 2024 12:16:08 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for additional node types (`RestElement`, `ObjectPattern`, `ArrayPattern`) in our AST processing. - Introduced `addPropertiesToJSObjectCode` function to enhance JavaScript object property management. - **Updates** - Enhanced `myFun2` function with new parameters and default values to improve flexibility and usage. - Improved `parseJSObject` function with additional parameters for better functionality. - **Tests** - Added a new test suite for `addPropertiesToJSObjectCode` function to ensure robust property management in JavaScript objects. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-07-15 15:31:42 +00:00
code = "",
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
): Set<functionParam> => {
const functionalParams = new Set<functionParam>();
node.params.forEach((paramNode) => {
if (isIdentifierNode(paramNode)) {
functionalParams.add({
paramName: paramNode.name,
defaultValue: undefined,
});
} else if (isAssignmentPatternNode(paramNode)) {
if (isIdentifierNode(paramNode.left)) {
const paramName = paramNode.left.name;
chore: Compute default value for jsaction params (#34708) ## Description This PR adds the values to jsArguments. The logic for this is - If the value is string then it is kept as is - For non-strings they are wrapped with `{{ }}` do maintain the data type integrity when evaluated. This property is currently not used anywhere in the platform and this is intended to be used by js modules to identify the default values of parameters and provide support to alter then in a UI in the app. This PR also splits `workers/Evaluation/getJSActionForEvalContext.ts` to override in the EE for modules PR for https://github.com/appsmithorg/appsmith-ee/pull/4612 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9919551354> > Commit: c6ab372477fb3fd2f1ce171729af4fa64ac2a487 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9919551354&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Sat, 13 Jul 2024 12:16:08 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for additional node types (`RestElement`, `ObjectPattern`, `ArrayPattern`) in our AST processing. - Introduced `addPropertiesToJSObjectCode` function to enhance JavaScript object property management. - **Updates** - Enhanced `myFun2` function with new parameters and default values to improve flexibility and usage. - Improved `parseJSObject` function with additional parameters for better functionality. - **Tests** - Added a new test suite for `addPropertiesToJSObjectCode` function to ensure robust property management in JavaScript objects. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-07-15 15:31:42 +00:00
if (!needValue || !code) {
functionalParams.add({ paramName, defaultValue: undefined });
} else {
chore: Compute default value for jsaction params (#34708) ## Description This PR adds the values to jsArguments. The logic for this is - If the value is string then it is kept as is - For non-strings they are wrapped with `{{ }}` do maintain the data type integrity when evaluated. This property is currently not used anywhere in the platform and this is intended to be used by js modules to identify the default values of parameters and provide support to alter then in a UI in the app. This PR also splits `workers/Evaluation/getJSActionForEvalContext.ts` to override in the EE for modules PR for https://github.com/appsmithorg/appsmith-ee/pull/4612 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9919551354> > Commit: c6ab372477fb3fd2f1ce171729af4fa64ac2a487 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9919551354&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Sat, 13 Jul 2024 12:16:08 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for additional node types (`RestElement`, `ObjectPattern`, `ArrayPattern`) in our AST processing. - Introduced `addPropertiesToJSObjectCode` function to enhance JavaScript object property management. - **Updates** - Enhanced `myFun2` function with new parameters and default values to improve flexibility and usage. - Improved `parseJSObject` function with additional parameters for better functionality. - **Tests** - Added a new test suite for `addPropertiesToJSObjectCode` function to ensure robust property management in JavaScript objects. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-07-15 15:31:42 +00:00
const defaultValueInString = code.slice(
paramNode.right.start,
paramNode.right.end,
);
const defaultValue =
paramNode.right.type === "Literal" &&
typeof paramNode.right.value === "string"
? paramNode.right.value
: `{{${defaultValueInString}}}`;
functionalParams.add({
paramName,
defaultValue,
});
}
chore: Compute default value for jsaction params (#34708) ## Description This PR adds the values to jsArguments. The logic for this is - If the value is string then it is kept as is - For non-strings they are wrapped with `{{ }}` do maintain the data type integrity when evaluated. This property is currently not used anywhere in the platform and this is intended to be used by js modules to identify the default values of parameters and provide support to alter then in a UI in the app. This PR also splits `workers/Evaluation/getJSActionForEvalContext.ts` to override in the EE for modules PR for https://github.com/appsmithorg/appsmith-ee/pull/4612 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9919551354> > Commit: c6ab372477fb3fd2f1ce171729af4fa64ac2a487 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9919551354&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Sat, 13 Jul 2024 12:16:08 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for additional node types (`RestElement`, `ObjectPattern`, `ArrayPattern`) in our AST processing. - Introduced `addPropertiesToJSObjectCode` function to enhance JavaScript object property management. - **Updates** - Enhanced `myFun2` function with new parameters and default values to improve flexibility and usage. - Improved `parseJSObject` function with additional parameters for better functionality. - **Tests** - Added a new test suite for `addPropertiesToJSObjectCode` function to ensure robust property management in JavaScript objects. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-07-15 15:31:42 +00:00
} else if (
isObjectPatternNode(paramNode.left) ||
isArrayPatternNode(paramNode.left)
) {
functionalParams.add({
paramName: "",
defaultValue: undefined,
});
}
// The below computations are very basic and can be evolved into nested
// parsing logic to find param and it's default value.
} else if (isObjectPatternNode(paramNode)) {
functionalParams.add({
paramName: "",
defaultValue: `{{{}}}`,
});
} else if (isArrayPatternNode(paramNode)) {
functionalParams.add({
paramName: "",
defaultValue: "{{[]}}",
});
} else if (isRestElementNode(paramNode)) {
if ("name" in paramNode.argument) {
functionalParams.add({
paramName: paramNode.argument.name,
defaultValue: undefined,
});
}
}
});
return functionalParams;
};
const constructFinalMemberExpIdentifier = (
node: MemberExpressionNode,
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
child = "",
): string => {
const propertyAccessor = getPropertyAccessor(node.property);
if (isIdentifierNode(node.object)) {
return `${node.object.name}${propertyAccessor}${child}`;
} else {
const propertyAccessor = getPropertyAccessor(node.property);
const nestedChild = `${propertyAccessor}${child}`;
return constructFinalMemberExpIdentifier(
node.object as MemberExpressionNode,
nestedChild,
);
}
};
const getPropertyAccessor = (propertyNode: IdentifierNode | LiteralNode) => {
if (isIdentifierNode(propertyNode)) {
return `.${propertyNode.name}`;
} else if (isLiteralNode(propertyNode) && isString(propertyNode.value)) {
// is string literal search a['b']
return `.${propertyNode.value}`;
} else if (isLiteralNode(propertyNode) && isFinite(propertyNode.value)) {
// is array index search - a[9]
return `[${propertyNode.value}]`;
}
};
export const isTypeOfFunction = (type: string) => {
return (
type === NodeTypes.ArrowFunctionExpression ||
type === NodeTypes.FunctionExpression
);
};
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
export interface MemberExpressionData {
property: NodeWithLocation<IdentifierNode | LiteralNode>;
object: NodeWithLocation<IdentifierNode>;
}
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
export interface AssignmentExpressionData {
property: NodeWithLocation<IdentifierNode | LiteralNode>;
feat: show lint error for imperative store update (#27708) ## Description This PR introduces lint errors for an imperative update of the appsmith store object #### PR fixes following issue(s) Fixes #5822 #### Media ![Screenshot 2023-09-29 at 07 47 49](https://github.com/appsmithorg/appsmith/assets/46670083/f89a8dde-88c3-4b3c-8354-6797db440bac) #### DP https://ce-27708.dp.appsmith.com/ #### Type of change - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration. > Delete anything that is not relevant - [x] Manual - [ ] JUnit - [ ] Jest - [x] Cypress > > #### Test Plan Store value modification in a js object, widget, query > > #### Issues raised during DP testing https://github.com/appsmithorg/appsmith/pull/27708#issuecomment-1740767974 > > > ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-09-29 12:30:23 +00:00
object: NodeWithLocation<IdentifierNode | MemberExpressionNode>;
parentNode: NodeWithLocation<AssignmentExpressionNode>;
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
}
export interface CallExpressionData {
property: NodeWithLocation<IdentifierNode>;
params: NodeWithLocation<MemberExpressionNode | LiteralNode>[];
}
// This interface is used for storing call expression nodes with callee as member node
// example of such case is when a function is called on object like obj.func()
// This is required to understand whether appsmith.store.test.func() is present in script
// in order to display mutation error on such statements.
export interface MemberCallExpressionData {
property: NodeWithLocation<MemberExpressionNode | LiteralNode>;
object: NodeWithLocation<MemberExpressionNode>;
parentNode: NodeWithLocation<CallExpressionNode>;
}
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
export interface AssignmentExpressionNode extends Node {
operator: string;
left: Expression;
Right: Expression;
}
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
/** Function returns Invalid top-level member expressions from code
* @param code
* @param data
* @param evaluationVersion
* @returns information about all invalid property/method assessment in code
* @example Given data {
* JSObject1: {
* name:"JSObject",
* data:[]
* },
* Api1:{
* name: "Api1",
* data: []
* }
* },
* For code {{Api1.name + JSObject.unknownProperty}}, function returns information about "JSObject.unknownProperty" node.
*/
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
export const extractExpressionsFromCode = (
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
code: string,
data: Record<string, any>,
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
evaluationVersion: number,
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
): {
invalidTopLevelMemberExpressionsArray: MemberExpressionData[];
assignmentExpressionsData: AssignmentExpressionData[];
callExpressionsData: CallExpressionData[];
memberCallExpressionData: MemberCallExpressionData[];
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
} => {
const assignmentExpressionsData = new Set<AssignmentExpressionData>();
const callExpressionsData = new Set<CallExpressionData>();
const memberCallExpressionData = new Set<MemberCallExpressionData>();
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
const invalidTopLevelMemberExpressions = new Set<MemberExpressionData>();
const variableDeclarations = new Set<string>();
let functionalParams = new Set<string>();
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
let ast: Node = { end: 0, start: 0, type: "" };
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
try {
const sanitizedScript = sanitizeScript(code, evaluationVersion);
const wrappedCode = wrapCode(sanitizedScript);
ast = getAST(wrappedCode, { locations: true });
} catch (e) {
if (e instanceof SyntaxError) {
// Syntax error. Ignore and return empty list
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
return {
invalidTopLevelMemberExpressionsArray: [],
assignmentExpressionsData: [],
callExpressionsData: [],
memberCallExpressionData: [],
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
};
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
}
throw e;
}
simple(ast, {
MemberExpression(node: Node) {
const { computed, object, property } = node as MemberExpressionNode;
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
// We are only interested in top-level MemberExpression nodes
// Eg. for Api1.data.name, we are only interested in Api1.data
if (!isIdentifierNode(object)) return;
if (!(object.name in data) || !isTrueObject(data[object.name])) return;
// For computed member expressions (assessed via [], eg. JSObject1["name"] ),
// We are only interested in strings
if (
isLiteralNode(property) &&
isString(property.value) &&
!(property.value in data[object.name])
) {
invalidTopLevelMemberExpressions.add({
object,
property,
} as MemberExpressionData);
}
// We ignore computed member expressions if property is an identifier (JSObject[name])
// This is because we can't statically determine what the value of the identifier might be.
if (
isIdentifierNode(property) &&
!computed &&
!(property.name in data[object.name])
) {
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
invalidTopLevelMemberExpressions.add({
object,
property,
} as MemberExpressionData);
}
},
VariableDeclarator(node: Node) {
if (isVariableDeclarator(node)) {
variableDeclarations.add(node.id.name);
}
},
FunctionDeclaration(node: Node) {
if (!isFunctionDeclaration(node)) return;
functionalParams = new Set([
...functionalParams,
...getFunctionalParamNamesFromNode(node),
]);
},
FunctionExpression(node: Node) {
if (!isFunctionExpression(node)) return;
functionalParams = new Set([
...functionalParams,
...getFunctionalParamNamesFromNode(node),
]);
},
ArrowFunctionExpression(node: Node) {
if (!isArrowFunctionExpression(node)) return;
functionalParams = new Set([
...functionalParams,
...getFunctionalParamNamesFromNode(node),
]);
},
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
AssignmentExpression(node: Node) {
if (
!isAssignmentExpression(node) ||
node.operator !== "=" ||
!isMemberExpressionNode(node.left)
)
return;
feat: show lint error for imperative store update (#27708) ## Description This PR introduces lint errors for an imperative update of the appsmith store object #### PR fixes following issue(s) Fixes #5822 #### Media ![Screenshot 2023-09-29 at 07 47 49](https://github.com/appsmithorg/appsmith/assets/46670083/f89a8dde-88c3-4b3c-8354-6797db440bac) #### DP https://ce-27708.dp.appsmith.com/ #### Type of change - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration. > Delete anything that is not relevant - [x] Manual - [ ] JUnit - [ ] Jest - [x] Cypress > > #### Test Plan Store value modification in a js object, widget, query > > #### Issues raised during DP testing https://github.com/appsmithorg/appsmith/pull/27708#issuecomment-1740767974 > > > ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-09-29 12:30:23 +00:00
const { object, property } = node.left;
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
assignmentExpressionsData.add({
object,
property,
feat: show lint error for imperative store update (#27708) ## Description This PR introduces lint errors for an imperative update of the appsmith store object #### PR fixes following issue(s) Fixes #5822 #### Media ![Screenshot 2023-09-29 at 07 47 49](https://github.com/appsmithorg/appsmith/assets/46670083/f89a8dde-88c3-4b3c-8354-6797db440bac) #### DP https://ce-27708.dp.appsmith.com/ #### Type of change - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration. > Delete anything that is not relevant - [x] Manual - [ ] JUnit - [ ] Jest - [x] Cypress > > #### Test Plan Store value modification in a js object, widget, query > > #### Issues raised during DP testing https://github.com/appsmithorg/appsmith/pull/27708#issuecomment-1740767974 > > > ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-09-29 12:30:23 +00:00
parentNode: node,
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
} as AssignmentExpressionData);
},
CallExpression(node: Node) {
if (isCallExpressionNode(node)) {
if (isIdentifierNode(node.callee)) {
callExpressionsData.add({
property: node.callee,
params: node.arguments,
} as CallExpressionData);
}
if (isMemberExpressionNode(node.callee)) {
const { object, property } = node.callee;
memberCallExpressionData.add({
object,
property,
parentNode: node,
} as MemberCallExpressionData);
}
}
},
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
});
const invalidTopLevelMemberExpressionsArray = Array.from(
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
invalidTopLevelMemberExpressions,
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
).filter((MemberExpression) => {
return !(
variableDeclarations.has(MemberExpression.object.name) ||
functionalParams.has(MemberExpression.object.name)
);
});
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
return {
invalidTopLevelMemberExpressionsArray,
assignmentExpressionsData: [...assignmentExpressionsData],
callExpressionsData: [...callExpressionsData],
memberCallExpressionData: [...memberCallExpressionData],
feat: Add linting error for assignment expression (#25140) ## Description This change adds a linting error for direct mutation of widget property like `Widget.property = "dsf"` and instead suggests to use setter methods. #### PR fixes following issue(s) Fixes #5822 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing - [x] Add jest tests as mentioned in the [comments](https://www.notion.so/appsmith/Widget-Property-Setters-Tech-Spec-2a34730e2e6d4df8ae7637c363b1096c?pvs=4#276554d9875b42d68868aa969e9d7d03) of the tech spec document for this project. - [x] Add test to verify linting error for widget assignment - [x] Add cypress test for autocomplete of more setter methods - [x] Add cypress test for currencyInput setValue #### How Has This Been Tested? - [ ] Manual - [ ] Jest - [x] Cypress #### Test Plan #### Issues raised during DP testing ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Druthi Polisetty <druthi@appsmith.com>
2023-07-24 06:53:45 +00:00
};
feat: Linting in entity properties and methods (#16171) * Initial commit * Remove arrow function params from identifiers * Remove invalid identifiers from extracted identifiers * Remove invalid identifiers which are derived from function params and variable declarations * Fix typo error * Correctly remove invalid identifiers * Remove invalid names from identifier list * fix build failure * Add Promise to list of unacceptable entity name * Keep track of unreferenced identifiers in bindings * Add Global scope object names as unusable entity names * Keep track of unreferenced identifiers * Prevent traversal of data tree for addition of new paths and entities * Sync linting in trigger fields * Support linting of invalid properties * Fix linting reactivity bug in trigger field * Remove unused objects * Fix conflict in merging * Lint jsobject body for function change * Remove unused map from tests * Code cleanup * Modify jest tests * Update jest tests * Fix cypress tests * Code cleanup * Support linting of multiple bindings * Set squiggle line as long as invalid property length * Add jest tests * Minor code refactor * Move ast to shared repo * Rename confusing identifiers * Improve naming of functions and their return values * move shared widget validation utils and constants to shared folder * Add jest test for invalid entity names * Add cypress tests * Modify test comment * Extend list of dedicated worker scope identifiers * Resolve code review comments * Resolve review comments * Annonate code where necessary * Code refactor * Improve worker global scope object * Code refactor * Fix merge conflict * Code refactor * Minor bug fix * Redundant commit to retrigger vercel build * Add null checks to dependecy chain
2022-09-17 17:40:28 +00:00
};
const ancestorWalk = (ast: Node): NodeList => {
//List of all Identifier nodes with their property(if exists).
const identifierList = new Array<RefactorIdentifierNode>();
// List of all references found
const references = new Set<string>();
// List of variables declared within the script. All identifiers and member expressions derived from declared variables will be removed
const variableDeclarations = new Set<string>();
// List of functional params declared within the script. All identifiers and member expressions derived from functional params will be removed
let functionalParams = new Set<string>();
/*
* We do an ancestor walk on the AST in order to extract all references. For example, for member expressions and identifiers, we need to know
* what surrounds the identifier (its parent and ancestors), ancestor walk will give that information in the callback
* doc: https://github.com/acornjs/acorn/tree/master/acorn-walk
*/
ancestor(ast, {
Identifier(node: Node, ancestors: Node[]) {
/*
* We are interested in identifiers. Due to the nature of AST, Identifier nodes can
* also be nested inside MemberExpressions. For deeply nested object references, there
* could be nesting of many MemberExpressions. To find the final reference, we will
* try to find the top level MemberExpression that does not have a MemberExpression parent.
* */
let candidateTopLevelNode: IdentifierNode | MemberExpressionNode =
node as IdentifierNode;
let depth = ancestors.length - 2; // start "depth" with first parent
while (depth > 0) {
const parent = ancestors[depth];
if (
isMemberExpressionNode(parent) &&
/* Member expressions that are "computed" (with [ ] search)
and the ones that have optional chaining ( a.b?.c )
will be considered top level node.
We will stop looking for further parents */
/* "computed" exception - isArrayAccessorNode
Member expressions that are array accessors with static index - [9]
will not be considered top level.
We will continue looking further. */
(!parent.computed || isArrayAccessorNode(parent)) &&
!parent.optional
) {
candidateTopLevelNode = parent;
depth = depth - 1;
} else {
// Top level found
break;
}
}
//If parent is a Member expression then attach property to the Node.
//else push Identifier Node.
const parentNode = ancestors[ancestors.length - 2];
if (isMemberExpressionNode(parentNode)) {
identifierList.push({
...(node as IdentifierNode),
property: parentNode.property as IdentifierNode,
});
} else identifierList.push(node as RefactorIdentifierNode);
if (isIdentifierNode(candidateTopLevelNode)) {
// If the node is an Identifier, just save that
references.add(candidateTopLevelNode.name);
} else {
// For MemberExpression Nodes, we will construct a final reference string and then add
// it to the references list
const memberExpIdentifier = constructFinalMemberExpIdentifier(
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
candidateTopLevelNode,
);
references.add(memberExpIdentifier);
}
},
VariableDeclarator(node: Node) {
// keep a track of declared variables so they can be
// removed from the final list of references
if (isVariableDeclarator(node)) {
variableDeclarations.add(node.id.name);
}
},
FunctionDeclaration(node: Node) {
// params in function declarations are also counted as references so we keep
// track of them and remove them from the final list of references
if (!isFunctionDeclaration(node)) return;
functionalParams = new Set([
...functionalParams,
...getFunctionalParamNamesFromNode(node),
]);
},
FunctionExpression(node: Node) {
// params in function expressions are also counted as references so we keep
// track of them and remove them from the final list of references
if (!isFunctionExpression(node)) return;
functionalParams = new Set([
...functionalParams,
...getFunctionalParamNamesFromNode(node),
]);
},
ArrowFunctionExpression(node: Node) {
// params in arrow function expressions are also counted as references so we keep
// track of them and remove them from the final list of references
if (!isArrowFunctionExpression(node)) return;
functionalParams = new Set([
...functionalParams,
...getFunctionalParamNamesFromNode(node),
]);
},
});
return {
references,
functionalParams,
variableDeclarations,
identifierList,
};
};
//Replace export default by a variable declaration.
//This is required for acorn to parse code into AST.
const jsObjectToCode = (script: string) => {
return script.replace(/export default/g, jsObjectDeclaration);
};
//Revert the string replacement from 'jsObjectToCode'.
//variable declaration is replaced back by export default.
const jsCodeToObject = (script: string) => {
fix: Unblocking CI - Unexpected cyclic dependency error and Lint spec fixes (#20260) ## Description This PR fixes the false cyclic dependency error Cypress tests and the basic Lint error Cypress tests. > Add a TL;DR when description is extra long (helps content team) Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com>
2023-01-31 14:33:10 +00:00
return script.replace(jsObjectDeclaration, "export default");
};
fix: show evaluated value for action selector fields (#23099) ## Description The evaluated values for text fields in action selector were not shown. This PR fixes the issue. #### PR fixes following issue(s) Fixes #12736 #### Type of change - Bug fix (non-breaking change which fixes an issue) ## Testing > #### How Has This Been Tested? - [x] Cypress > > #### Test Plan > Add Testsmith test cases links that relate to this PR > > #### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) > > > ## Checklist: #### Dev activity - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Test-plan-implementation#speedbreaker-features-to-consider-for-every-change) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans/_edit#areas-of-interest) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-05-16 16:59:11 +00:00
export const isFunctionPresent = (
script: string,
evaluationVersion: number,
) => {
try {
const sanitizedScript = sanitizeScript(script, evaluationVersion);
const ast = getAST(sanitizedScript, {
locations: true,
ranges: true,
});
let isFunction = false;
simple(ast, {
FunctionDeclaration() {
isFunction = true;
},
FunctionExpression() {
isFunction = true;
},
ArrowFunctionExpression() {
isFunction = true;
},
});
return isFunction;
} catch (e) {
return false;
}
};
export function getMemberExpressionObjectFromProperty(
propertyName: string,
code: string,
evaluationVersion = 2,
) {
if (!propertyName) return [];
const memberExpressionObjects = new Set<string>();
let ast: Node = { end: 0, start: 0, type: "" };
try {
const sanitizedScript = sanitizeScript(code, evaluationVersion);
const wrappedCode = wrapCode(sanitizedScript);
ast = getAST(wrappedCode, { locations: true });
simple(ast, {
MemberExpression(node: Node) {
const { object, property } = node as MemberExpressionNode;
if (!isLiteralNode(property) && !isIdentifierNode(property)) return;
const propName = isLiteralNode(property)
? property.value
: property.name;
fix: improve autocompletion hints discovery (#28222) ## Description This PR improves autocompletion hints discovery by - Taking entities' recency of usage into consideration when sorting hints - Showing entity names at the top, before supported functions and properties - Deprioritizing the Function constructor and the MainContainer entity #### PR fixes following issue(s) Fixes #27870 Fixes #17684 Fixes https://github.com/appsmithorg/appsmith/issues/24975 #### Type of change - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration. > Delete anything that is not relevant - [ ] Manual - [ ] JUnit - [ ] Jest - [ ] Cypress > > #### Test Plan - [x] check for autocomplete results when multiple widgets of the same type are used - [x] check for entity renaming behavior - [x] verify function and mainContainer have been removed - [x] verify that recent entity changes affects autocomplete ranking > > #### Issues raised during DP testing https://github.com/appsmithorg/appsmith/pull/28222#issuecomment-1777487126 > > > ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [x] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [ ] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
2023-10-25 17:18:45 +00:00
if (!isNil(propName) && getStringValue(propName) === propertyName) {
const memberExpressionObjectString = generate(object);
memberExpressionObjects.add(memberExpressionObjectString);
}
},
});
return Array.from(memberExpressionObjects);
} catch (e) {
return [];
}
}