MCPcopy Index your code
hub / github.com/nodejs/node / subparse

Method subparse

tools/inspector_protocol/jinja2/parser.py:851–897  ·  view source on GitHub ↗
(self, end_tokens=None)

Source from the content-addressed store, hash-verified

849 return node
850
851 def subparse(self, end_tokens=None):
852 body = []
853 data_buffer = []
854 add_data = data_buffer.append
855
856 if end_tokens is not None:
857 self._end_token_stack.append(end_tokens)
858
859 def flush_data():
860 if data_buffer:
861 lineno = data_buffer[0].lineno
862 body.append(nodes.Output(data_buffer[:], lineno=lineno))
863 del data_buffer[:]
864
865 try:
866 while self.stream:
867 token = self.stream.current
868 if token.type == 'data':
869 if token.value:
870 add_data(nodes.TemplateData(token.value,
871 lineno=token.lineno))
872 next(self.stream)
873 elif token.type == 'variable_begin':
874 next(self.stream)
875 add_data(self.parse_tuple(with_condexpr=True))
876 self.stream.expect('variable_end')
877 elif token.type == 'block_begin':
878 flush_data()
879 next(self.stream)
880 if end_tokens is not None and \
881 self.stream.current.test_any(*end_tokens):
882 return body
883 rv = self.parse_statement()
884 if isinstance(rv, list):
885 body.extend(rv)
886 else:
887 body.append(rv)
888 self.stream.expect('block_end')
889 else:
890 raise AssertionError('internal parsing error')
891
892 flush_data()
893 finally:
894 if end_tokens is not None:
895 self._end_token_stack.pop()
896
897 return body
898
899 def parse(self):
900 """Parse the whole template into a `Template` node."""

Callers 2

parse_statementsMethod · 0.95
parseMethod · 0.95

Calls 9

parse_tupleMethod · 0.95
parse_statementMethod · 0.95
popMethod · 0.80
nextFunction · 0.50
AssertionErrorFunction · 0.50
appendMethod · 0.45
expectMethod · 0.45
test_anyMethod · 0.45
extendMethod · 0.45

Tested by

no test coverage detected