MCPcopy Create free account
hub / github.com/apache/fory / parse_field_options

Method parse_field_options

compiler/fory_compiler/frontend/fdl/parser.py:723–771  ·  view source on GitHub ↗

Parse field options: [deprecated=true, ref=true].

(self, field_name: str)

Source from the content-addressed store, hash-verified

721 )
722
723 def parse_field_options(self, field_name: str) -> dict:
724 """Parse field options: [deprecated=true, ref=true]."""
725 self.consume(TokenType.LBRACKET)
726 options = {}
727
728 while True:
729 name_token = self.current()
730 if self.check(TokenType.IDENT):
731 self.advance()
732 option_name = name_token.value
733 elif self.check(TokenType.REF):
734 self.advance()
735 option_name = "ref"
736 elif self.check(TokenType.OPTIONAL):
737 self.advance()
738 option_name = "optional"
739 elif self.check(TokenType.REPEATED):
740 self.advance()
741 option_name = "repeated"
742 elif self.check(TokenType.LIST):
743 self.advance()
744 option_name = "list"
745 elif self.check(TokenType.WEAK):
746 self.advance()
747 option_name = "weak"
748 else:
749 raise self.error(
750 f"Expected option name, got {self.current().type.name}"
751 )
752
753 self.consume(TokenType.EQUALS, "Expected '=' after option name")
754 option_value = self.parse_option_value()
755 options[option_name] = option_value
756
757 if option_name not in KNOWN_FIELD_OPTIONS:
758 warnings.warn(
759 f"Line {name_token.line}: ignoring unknown field option '{option_name}' on field '{field_name}'",
760 stacklevel=2,
761 )
762
763 if self.check(TokenType.COMMA):
764 self.advance()
765 elif self.check(TokenType.RBRACKET):
766 break
767 else:
768 raise self.error("Expected ',' or ']' in field options")
769
770 self.consume(TokenType.RBRACKET, "Expected ']' after field options")
771 return options
772
773 def parse_ref_options(self, name: str) -> dict:
774 """Parse ref keyword options such as ref(weak=true, thread_safe=false)."""

Callers 2

parse_union_fieldMethod · 0.95
parse_fieldMethod · 0.95

Calls 7

consumeMethod · 0.95
currentMethod · 0.95
checkMethod · 0.95
advanceMethod · 0.95
errorMethod · 0.95
parse_option_valueMethod · 0.95
warnMethod · 0.65

Tested by

no test coverage detected