Skip to content

Javascript - visitors for space get info on locations #5459

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 9 commits into from
339 changes: 174 additions & 165 deletions rewrite-javascript/rewrite/src/java/rpc.ts

Large diffs are not rendered by default.

350 changes: 348 additions & 2 deletions rewrite-javascript/rewrite/src/java/tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -769,6 +769,352 @@ export namespace J {
}
}

export type ContainerLocation =
"ANNOTATION_ARGUMENTS" |
"ARRAY_BINDING_PATTERN_ELEMENTS" |
"CASE_LABELS" |
"CASE_STATEMENTS" |
"CLASS_DECLARATION_IMPLEMENTS" |
"CLASS_DECLARATION_PERMITTING" |
"CLASS_DECLARATION_PRIMARY_CONSTRUCTOR" |
"CLASS_DECLARATION_TYPE_PARAMETERS" |
"COMPUTED_PROPERTY_METHOD_DECLARATION_PARAMETERS" |
"DECONSTRUCTION_PATTERN" |
"DECONSTRUCTION_PATTERN_NESTED" |
"EXPRESSION_WITH_TYPE_ARGUMENTS_TYPE_ARGUMENTS" |
"FUNCTION_TYPE_PARAMETERS" |
"IMPORT_ATTRIBUTES_ELEMENTS" |
"IMPORT_TYPE_ARGUMENT_AND_ATTRIBUTES" |
"IMPORT_TYPE_ATTRIBUTES_ELEMENTS" |
"IMPORT_TYPE_TYPE_ARGUMENTS" |
"INDEX_SIGNATURE_DECLARATION_PARAMETERS" |
"INTERSECTION_TYPE" |
"INTERSECTION_TYPE_BOUNDS" |
"MAPPED_TYPE_VALUE_TYPE" |
"MEMBER_REFERENCE_TYPE_PARAMETERS" |
"METHOD_DECLARATION_PARAMETERS" |
"METHOD_DECLARATION_THROWS" |
"METHOD_INVOCATION_ARGUMENTS" |
"METHOD_INVOCATION_TYPE_PARAMETERS" |
"NAMED_EXPORTS_ELEMENTS" |
"NAMED_IMPORTS_ELEMENTS" |
"NEW_ARRAY_INITIALIZER" |
"NEW_CLASS_ARGUMENTS" |
"OBJECT_BINDING_DECLARATIONS_BINDINGS" |
"PARAMETRIZED_TYPE_TYPE_PARAMETERS" |
"TAGGED_TEMPLATE_EXPRESSION_TYPE_ARGUMENTS" |
"TRY_RESOURCES" |
"TUPLE_ELEMENTS" |
"TYPE_PARAMETER_BOUNDS" |
"TYPE_QUERY_TYPE_ARGUMENTS";

export type LeftPaddedLocation =
"ARRAY_TYPE_DIMENSION" |
"ASSERT_DETAIL" |
"ASSIGNMENT_ASSIGNMENT" |
"ASSIGNMENT_OPERATION_EXTENSIONS_OPERATOR" |
"ASSIGNMENT_OPERATION_OPERATOR" |
"BINARY_EXTENSIONS_OPERATOR" |
"BINARY_OPERATOR" |
"BINDING_ELEMENT_INITIALIZER" |
"CLASS_DECLARATION_EXTENDS" |
"CONDITIONAL_TYPE_CONDITION" |
"DO_WHILE_LOOP_WHILE_CONDITION" |
"EXPORT_ASSIGNMENT_EXPRESSION" |
"EXPORT_DECLARATION_MODULE_SPECIFIER" |
"EXPORT_DECLARATION_TYPE_ONLY" |
"EXPORT_SPECIFIER_TYPE_ONLY" |
"FIELD_ACCESS_NAME" |
"FUNCTION_TYPE_CONSTRUCTOR_TYPE" |
"FUNCTION_TYPE_RETURN_TYPE" |
"IMPORT_ALIAS" |
"IMPORT_ATTRIBUTE_VALUE" |
"IMPORT_DECLARATION_MODULE_SPECIFIER" |
"IMPORT_SPECIFIER_IMPORT_TYPE" |
"IMPORT_STATIC" |
"IMPORT_TYPE_QUALIFIER" |
"INDEX_SIGNATURE_DECLARATION_TYPE_EXPRESSION" |
"INFER_TYPE_TYPE_PARAMETER" |
"MAPPED_TYPE_HAS_QUESTION_TOKEN" |
"MAPPED_TYPE_HAS_READONLY" |
"MAPPED_TYPE_PARAMETER_ITERATE_TYPE" |
"MAPPED_TYPE_PREFIX_TOKEN" |
"MAPPED_TYPE_SUFFIX_TOKEN" |
"MEMBER_REFERENCE_REFERENCE" |
"METHOD_DECLARATION_DEFAULT_VALUE" |
"NAMESPACE_DECLARATION_KEYWORD_TYPE" |
"OBJECT_BINDING_DECLARATIONS_INITIALIZER" |
"SATISFIES_EXPRESSION_SATISFIES_TYPE" |
"SCOPED_VARIABLE_DECLARATIONS_SCOPE" |
"TERNARY_FALSE_PART" |
"TERNARY_TRUE_PART" |
"TRY_FINALLY" |
"TYPE_DECLARATION_INITIALIZER" |
"TYPE_DECLARATION_NAME" |
"TYPE_OPERATOR_EXPRESSION" |
"TYPE_PREDICATE_ASSERTS" |
"TYPE_PREDICATE_EXPRESSION" |
"UNARY_OPERATOR" |
"VARIABLE_DIMENSIONS_AFTER_NAME" |
"VARIABLE_INITIALIZER" |
"WILDCARD_BOUND";

export type RightPaddedLocation =
"ALIAS_PROPERTY_NAME" |
"ARRAY_DIMENSION_INDEX" |
"BINDING_ELEMENT_PROPERTY_NAME" |
"BLOCK_STATEMENTS" |
"BLOCK_STATIC" |
"CASE_BODY" |
"COMPILATION_UNIT_IMPORTS" |
"COMPILATION_UNIT_PACKAGE_DECLARATION" |
"COMPUTED_PROPERTY_NAME_EXPRESSION" |
"CONTAINER_ELEMENTS" |
"CONTINUE_TREE" |
"CONTROL_PARENTHESES_TREE" |
"DO_WHILE_LOOP_BODY" |
"ELSE_BODY" |
"ENUM_VALUE_EXPRESSION" |
"ENUM_VALUE_SET_ENUMS" |
"FOR_EACH_LOOP_BODY" |
"FOR_EACH_LOOP_CONTROL_ITERABLE" |
"FOR_EACH_LOOP_CONTROL_VARIABLE" |
"FOR_IN_LOOP_BODY" |
"FOR_IN_LOOP_ITERABLE" |
"FOR_IN_LOOP_VARIABLE" |
"FOR_LOOP_BODY" |
"FOR_LOOP_CONTROL_CONDITION" |
"FOR_LOOP_CONTROL_INIT" |
"FOR_LOOP_CONTROL_UPDATE" |
"FOR_OF_LOOP_ITERABLE" |
"FOR_OF_LOOP_LOOP" |
"FOR_OF_LOOP_VARIABLE" |
"IF_THEN_PART" |
"IMPORT_CLAUSE_NAME" |
"IMPORT_TYPE_ATTRIBUTES_TOKEN" |
"IMPORT_TYPE_HAS_TYPEOF" |
"INDEX_TYPE_ELEMENT" |
"INSTANCE_OF_EXPRESSION" |
"INTERSECTION_TYPES" |
"JS_COMPILATION_UNIT_STATEMENTS" |
"KEYS_REMAPPING_NAME_TYPE" |
"KEYS_REMAPPING_TYPE_PARAMETER" |
"LABEL_LABEL" |
"LAMBDA_PARAMETERS_PARAMETERS" |
"MEMBER_REFERENCE_CONTAINING" |
"METHOD_INVOCATION_SELECT" |
"MULTI_CATCH_ALTERNATIVES" |
"NAMESPACE_DECLARATION_NAME" |
"NEW_CLASS_ENCLOSING" |
"NULLABLE_TYPE_TYPE_TREE" |
"PARAMETERIZED_TYPE_TREE" |
"PARENTHESES_TREE" |
"PROPERTY_ASSIGNMENT_NAME" |
"SCOPED_VARIABLE_DECLARATIONS_VARIABLES" |
"SPACE_ELEMENTS" |
"TAGGED_TEMPLATE_EXPRESSION_TAG" |
"TEMPLATE_EXPRESSION_SPANS" |
"TRAILING_TOKEN_STATEMENT_EXPRESSION" |
"TYPE_PARAMETERS_TYPE_PARAMETERS" |
"TYPE_PARAMETER_CONSTRAINT_TYPE" |
"TYPE_PARAMETER_DEFAULT_TYPE" |
"UNION_TYPES" |
"VARIABLE_DECLARATIONS_VARIABLES" |
"WHILE_LOOP_BODY" |
"WITH_STATEMENT_BODY";

export type ElementSuffixLocation = `${RightPaddedLocation}_SUFFIX`;

export type ElementPrefixLocation =
"ALIAS_PREFIX" |
"ANNOTATED_TYPE_PREFIX" |
"ANNOTATION_PREFIX" |
"ARRAY_ACCESS_PREFIX" |
"ARRAY_BINDING_PATTERN_PREFIX" |
"ARRAY_DIMENSION_PREFIX" |
"ARRAY_TYPE_PREFIX" |
"ARROW_FUNCTION_PREFIX" |
"ASSERT_PREFIX" |
"ASSIGNMENT_OPERATION_EXTENSIONS_PREFIX" |
"ASSIGNMENT_OPERATION_PREFIX" |
"ASSIGNMENT_PREFIX" |
"AWAIT_PREFIX" |
"BINARY_EXTENSIONS_PREFIX" |
"BINARY_PREFIX" |
"BINDING_ELEMENT_PREFIX" |
"BLOCK_PREFIX" |
"BREAK_PREFIX" |
"CASE_PREFIX" |
"CLASS_DECLARATION_KIND_PREFIX" |
"CLASS_DECLARATION_PREFIX" |
"COMPILATION_UNIT_PREFIX" |
"COMPUTED_PROPERTY_METHOD_DECLARATION_PREFIX" |
"COMPUTED_PROPERTY_NAME_PREFIX" |
"CONDITIONAL_TYPE_PREFIX" |
"CONTINUE_PREFIX" |
"CONTROL_PARENTHESES_PREFIX" |
"DECONSTRUCTION_PATTERN_PREFIX" |
"DELETE_PREFIX" |
"DO_WHILE_LOOP_PREFIX" |
"ELSE_PREFIX" |
"EMPTY_PREFIX" |
"ENUM_VALUE_PREFIX" |
"ENUM_VALUE_SET_PREFIX" |
"ERRONEOUS_PREFIX" |
"EXPORT_ASSIGNMENT_PREFIX" |
"EXPORT_DECLARATION_PREFIX" |
"EXPORT_SPECIFIER_PREFIX" |
"EXPRESSION_STATEMENT_PREFIX" |
"EXPRESSION_WITH_TYPE_ARGUMENTS_PREFIX" |
"FIELD_ACCESS_PREFIX" |
"FOR_EACH_LOOP_CONTROL_PREFIX" |
"FOR_EACH_LOOP_PREFIX" |
"FOR_IN_LOOP_PREFIX" |
"FOR_LOOP_CONTROL_PREFIX" |
"FOR_LOOP_PREFIX" |
"FOR_OF_LOOP_PREFIX" |
"FUNCTION_TYPE_PREFIX" |
"IDENTIFIER_PREFIX" |
"IF_PREFIX" |
"IMPORT_ATTRIBUTES_PREFIX" |
"IMPORT_ATTRIBUTE_PREFIX" |
"IMPORT_CLAUSE_PREFIX" |
"IMPORT_DECLARATION_PREFIX" |
"IMPORT_PREFIX" |
"IMPORT_SPECIFIER_PREFIX" |
"IMPORT_TYPE_ATTRIBUTES_PREFIX" |
"IMPORT_TYPE_PREFIX" |
"INDEXED_ACCESS_TYPE_PREFIX" |
"INDEX_SIGNATURE_DECLARATION_PREFIX" |
"INDEX_TYPE_PREFIX" |
"INFER_TYPE_PREFIX" |
"INSTANCE_OF_PREFIX" |
"INTERSECTION_PREFIX" |
"INTERSECTION_TYPE_PREFIX" |
"JS_COMPILATION_UNIT_PREFIX" |
"KEYS_REMAPPING_PREFIX" |
"LABEL_PREFIX" |
"LAMBDA_PARAMETERS_PREFIX" |
"LAMBDA_PREFIX" |
"LITERAL_PREFIX" |
"LITERAL_TYPE_PREFIX" |
"MAPPED_TYPE_PARAMETER_PREFIX" |
"MAPPED_TYPE_PREFIX" |
"MEMBER_REFERENCE_PREFIX" |
"METHOD_DECLARATION_PREFIX" |
"METHOD_INVOCATION_PREFIX" |
"MODIFIER_PREFIX" |
"MULTI_CATCH_PREFIX" |
"NAMED_EXPORTS_PREFIX" |
"NAMED_IMPORTS_PREFIX" |
"NAMESPACE_DECLARATION_PREFIX" |
"NEW_ARRAY_PREFIX" |
"NEW_CLASS_PREFIX" |
"NULLABLE_TYPE_PREFIX" |
"OBJECT_BINDING_DECLARATIONS_PREFIX" |
"PACKAGE_PREFIX" |
"PARAMETERIZED_TYPE_PREFIX" |
"PARENTHESES_PREFIX" |
"PARENTHESIZED_TYPE_TREE_PREFIX" |
"PRIMITIVE_PREFIX" |
"PROPERTY_ASSIGNMENT_PREFIX" |
"RETURN_PREFIX" |
"SATISFIES_EXPRESSION_PREFIX" |
"SCOPED_VARIABLE_DECLARATIONS_PREFIX" |
"STATEMENT_EXPRESSION_PREFIX" |
"SWITCH_EXPRESSION_PREFIX" |
"SWITCH_PREFIX" |
"SYNCHRONIZED_PREFIX" |
"TAGGED_TEMPLATE_EXPRESSION_PREFIX" |
"TEMPLATE_EXPRESSION_PREFIX" |
"TEMPLATE_EXPRESSION_SPAN_PREFIX" |
"TERNARY_PREFIX" |
"THROW_PREFIX" |
"TRAILING_TOKEN_STATEMENT_PREFIX" |
"TRY_CATCH_PREFIX" |
"TRY_PREFIX" |
"TRY_RESOURCE_PREFIX" |
"TUPLE_PREFIX" |
"TYPE_CAST_PREFIX" |
"TYPE_DECLARATION_PREFIX" |
"TYPE_INFO_PREFIX" |
"TYPE_LITERAL_PREFIX" |
"TYPE_OF_PREFIX" |
"TYPE_OPERATOR_PREFIX" |
"TYPE_PARAMETERS_PREFIX" |
"TYPE_PARAMETER_PREFIX" |
"TYPE_PREDICATE_PREFIX" |
"TYPE_QUERY_PREFIX" |
"TYPE_TREE_EXPRESSION_PREFIX" |
"UNARY_PREFIX" |
"UNION_PREFIX" |
"UNKNOWN_PREFIX" |
"UNKNOWN_SOURCE_PREFIX" |
"VARIABLE_DECLARATIONS_PREFIX" |
"VARIABLE_PREFIX" |
"VOID_PREFIX" |
"WHILE_LOOP_PREFIX" |
"WILDCARD_PREFIX" |
"WITH_STATEMENT_PREFIX" |
"YIELD_PREFIX";

export type SpaceLocation =
"ANY" |
ElementPrefixLocation |
ElementSuffixLocation |
LeftPaddedLocation | // notice in Java JLeftPadded.beforeLocation has the same name for all values
"ARRAY_TYPE_DIMENSION" |
"ARROW_FUNCTION_ARROW" |
"ARROW_FUNCTION_PARAMETERS" |
"ARROW_FUNCTION_PREFIX" |
"ASSIGNMENT_OPERATION_EXTENSIONS_OPERATOR" |
"ASSIGNMENT_OPERATION_OPERATOR" |
"BINARY_EXTENSIONS_OPERATOR" |
"BINARY_OPERATOR" |
"BLOCK_END" |
"CASE_STATEMENTS" |
"CLASS_DECLARATION" |
"CLASS_DECLARATION_CLASS_KIND" |
"COMPILATION_UNIT_EOF" |
"COMPUTED_PROPERTY_METHOD_DECLARATION" |
"COMPUTED_PROPERTY_METHOD_DECLARATION_PREFIX" |
"ENUM_VALUE_PREFIX" |
"FOR_IN_LOOP_PREFIX" |
"FOR_LOOP_PREFIX" |
"FOR_OF_LOOP_AWAIT" |
"FOR_OF_LOOP_PREFIX" |
"FUNCTION_TYPE_PREFIX" |
"IDENTIFIER" |
"IMPORT_TYPE_ATTRIBUTES_END" |
"JRIGHT_PADDED_LOCAL_AFTER" |
"JRIGHT_PADDED_LOCAL_SINGLE_AFTER" |
"JS_COMPILATION_UNIT_EOF" |
"LAMBDA_ARROW" |
"MARKER_NON_NULL_ASSERTION" |
"MARKER_OPTIONAL" |
"MARKER_SPREAD" |
"MARKER_TRAILING_COMMA" |
"METHOD_DECLARATION" |
"METHOD_DECLARATION_PREFIX" |
"NAMESPACE_DECLARATION_KEYWORD_TYPE" |
"NEW_CLASS_NEW" |
"RIGHT_PADDED_LOCAL_AFTER" |
"SCOPED_VARIABLE_DECLARATIONS_BEFORE" |
"SPACE_AFTER" |
"SPACE_BEFORE" |
"SPACE_ELEMENT" |
"STATEMENT_LOCAL_AFTER" |
"TYPE_DECLARATION_PREFIX" |
"TYPE_PARAMETER_BEFORE" |
"TYPE_PREFIX" |
"UNARY_OPERATOR" |
"VARIABLE_DECLARATIONS_AFTER" |
"VARIABLE_DECLARATIONS_VARARGS" |
"YIELD_AFTER" |
"YIELD_BEFORE" |
"YIELD_ELEMENT" |
"YIELD_PREFIX";

export function isSpace(tree: any): tree is J.Space {
return tree &&
typeof tree === 'object' &&
Expand Down Expand Up @@ -879,11 +1225,11 @@ Object.values(J.Kind).forEach(kind => {
if (kind === J.Kind.Space) {
RpcCodecs.registerCodec(kind, {
async rpcReceive(before: J.Space, q: RpcReceiveQueue): Promise<J.Space> {
return (await javaReceiver.visitSpace(before, q))!;
return (await javaReceiver.visitSpace(before, "ANY", q))!;
},

async rpcSend(after: J.Space, q: RpcSendQueue): Promise<void> {
await javaSender.visitSpace(after, q);
await javaSender.visitSpace(after, "ANY", q);
}
}
);
Expand Down
Loading