python-fragments 0.7__tar.gz → 0.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. {python_fragments-0.7 → python_fragments-0.9}/PKG-INFO +1 -1
  2. {python_fragments-0.7 → python_fragments-0.9}/fragments/grammar.py +22 -2
  3. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/lifecycle.py +3 -7
  4. {python_fragments-0.7 → python_fragments-0.9}/pyproject.toml +1 -1
  5. {python_fragments-0.7 → python_fragments-0.9}/python_fragments.egg-info/PKG-INFO +1 -1
  6. {python_fragments-0.7 → python_fragments-0.9}/README.md +0 -0
  7. {python_fragments-0.7 → python_fragments-0.9}/fragments/__init__.py +0 -0
  8. {python_fragments-0.7 → python_fragments-0.9}/fragments/ast_nodes.py +0 -0
  9. {python_fragments-0.7 → python_fragments-0.9}/fragments/cli.py +0 -0
  10. {python_fragments-0.7 → python_fragments-0.9}/fragments/html/__init__.py +0 -0
  11. {python_fragments-0.7 → python_fragments-0.9}/fragments/html/elements.py +0 -0
  12. {python_fragments-0.7 → python_fragments-0.9}/fragments/loader.py +0 -0
  13. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/__init__.py +0 -0
  14. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/based_proxy.py +0 -0
  15. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/__init__.py +0 -0
  16. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/code_actions.py +0 -0
  17. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/completion.py +0 -0
  18. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/definition.py +0 -0
  19. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/diagnostics.py +0 -0
  20. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/document_highlight.py +0 -0
  21. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/document_symbols.py +0 -0
  22. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/folding_range.py +0 -0
  23. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/hover.py +0 -0
  24. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/inlay_hints.py +0 -0
  25. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/references.py +0 -0
  26. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/rename.py +0 -0
  27. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/semantic_tokens.py +0 -0
  28. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/client_message_handlers/signature_help.py +0 -0
  29. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/file_state.py +0 -0
  30. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/message_queue.py +0 -0
  31. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/pyright_notification_handlers/__init__.py +0 -0
  32. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/pyright_notification_handlers/capability.py +0 -0
  33. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/pyright_notification_handlers/configuration.py +0 -0
  34. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/pyright_notification_handlers/diagnostics.py +0 -0
  35. {python_fragments-0.7 → python_fragments-0.9}/fragments/lsp/types.py +0 -0
  36. {python_fragments-0.7 → python_fragments-0.9}/fragments/source.py +0 -0
  37. {python_fragments-0.7 → python_fragments-0.9}/fragments/transpiler.py +0 -0
  38. {python_fragments-0.7 → python_fragments-0.9}/python_fragments.egg-info/SOURCES.txt +0 -0
  39. {python_fragments-0.7 → python_fragments-0.9}/python_fragments.egg-info/dependency_links.txt +0 -0
  40. {python_fragments-0.7 → python_fragments-0.9}/python_fragments.egg-info/entry_points.txt +0 -0
  41. {python_fragments-0.7 → python_fragments-0.9}/python_fragments.egg-info/requires.txt +0 -0
  42. {python_fragments-0.7 → python_fragments-0.9}/python_fragments.egg-info/top_level.txt +0 -0
  43. {python_fragments-0.7 → python_fragments-0.9}/setup.cfg +0 -0
  44. {python_fragments-0.7 → python_fragments-0.9}/tests/test_grammar.py +0 -0
  45. {python_fragments-0.7 → python_fragments-0.9}/tests/test_source_map.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-fragments
3
- Version: 0.7
3
+ Version: 0.9
4
4
  Summary: Modern HTML template rendering in Python
5
5
  Author-email: The Running Algorithm <services@therunningalgorithm.info>
6
6
  License: Proprietary
@@ -4,7 +4,6 @@ import re
4
4
  from fragments.ast_nodes import ASTFragment, ASTHTMLAttribute, ASTHTMLComment, ASTHTMLElement, ASTHTMLText, ASTInterpolation, ASTModule, ASTPython
5
5
  from fragments.source import Source
6
6
 
7
- PYTHON = r"([\s\S]*?)(?=<>)|[\s\S]*$"
8
7
  IDENTIFIER = r"[a-zA-Z_][a-zA-Z0-9_]*"
9
8
  STRING_CONTENTS = r"(.*?)(?=\")"
10
9
  HTML_IDENTIFIER = r"[a-zA-Z][a-zA-Z0-9_-]*"
@@ -56,8 +55,29 @@ def expect_module(source: Source) -> tuple[Source, ASTModule]:
56
55
 
57
56
  def expect_python(source: Source) -> tuple[Source, ASTPython]:
58
57
  """Vanilla Python code."""
58
+ PYTHON = r"([\s\S]*?)(?=<>|'''|\"\"\"|'|\"|#)|[\s\S]*$"
59
59
  source_start: int = source.offset
60
- source, python = expect_regex(source, PYTHON, "python source")
60
+ python: str = ""
61
+
62
+ while not source.remaining().startswith("<>") and not source.at_end():
63
+ source, next_python = expect_regex(source, PYTHON, "python source")
64
+ python += next_python
65
+ if source.remaining().startswith('"""'):
66
+ source, next_python = expect_regex(source, r'"""([\s\S]*?)(?:"""|$)', "python source")
67
+ python += next_python
68
+ elif source.remaining().startswith("'''"):
69
+ source, next_python = expect_regex(source, r"'''([\s\S]*?)(?:'''|$)", "python source")
70
+ python += next_python
71
+ elif source.remaining().startswith("'"):
72
+ source, next_python = expect_regex(source, r"'(?:[^'\\]|\\.)*(?:'|$)", "python source")
73
+ python += next_python
74
+ elif source.remaining().startswith('"'):
75
+ source, next_python = expect_regex(source, r'"(?:[^"\\]|\\.)*(?:"|$)', "python source")
76
+ python += next_python
77
+ elif source.remaining().startswith("#"):
78
+ source, next_python = expect_regex(source, r"#[^\n]*", "python source")
79
+ python += next_python
80
+
61
81
  return source, ASTPython(source_start, source.offset, python)
62
82
 
63
83
 
@@ -27,11 +27,7 @@ def publish_parse_error_diagnostics(uri: str) -> None:
27
27
  parse_error = based_proxy.PARSE_ERRORS.get(uri)
28
28
  if parse_error is not None:
29
29
  diagnostics.append(parse_error)
30
- based_proxy.proxy().notify(
31
- types.PublishDiagnosticsNotification(
32
- params=types.PublishDiagnosticsParams(uri=uri, diagnostics=diagnostics)
33
- )
34
- )
30
+ based_proxy.proxy().notify(types.PublishDiagnosticsNotification(params=types.PublishDiagnosticsParams(uri=uri, diagnostics=diagnostics)))
35
31
 
36
32
 
37
33
  @handle_from_client(types.INITIALIZE)
@@ -58,7 +54,7 @@ async def did_open(message: REQUESTS | NOTIFICATIONS) -> None:
58
54
  file_state = FileState(document.text)
59
55
  based_proxy.PARSE_ERRORS[document.uri] = None
60
56
  FILE_STATES[document.uri] = file_state
61
- document.text = file_state.transpiled
57
+ document.text = file_state.original if file_state.vanilla else file_state.transpiled
62
58
  except grammar.ParsingError as error:
63
59
  based_proxy.PARSE_ERRORS[document.uri] = _parse_error_diagnostic(document.text, error)
64
60
  publish_parse_error_diagnostics(document.uri)
@@ -79,7 +75,7 @@ async def did_change(message: REQUESTS | NOTIFICATIONS) -> None:
79
75
  file_state = FileState(text)
80
76
  based_proxy.PARSE_ERRORS[uri] = None
81
77
  FILE_STATES[uri] = file_state
82
- notification.params.content_changes = [types.TextDocumentContentChangeWholeDocument(text=file_state.transpiled)]
78
+ notification.params.content_changes = [types.TextDocumentContentChangeWholeDocument(text=file_state.original if file_state.vanilla else file_state.transpiled)]
83
79
  if had_parse_error:
84
80
  publish_parse_error_diagnostics(uri)
85
81
  except grammar.ParsingError as error:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-fragments"
7
- version = "0.7"
7
+ version = "0.9"
8
8
  description = "Modern HTML template rendering in Python"
9
9
  authors = [{ name = "The Running Algorithm", email = "services@therunningalgorithm.info" }]
10
10
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-fragments
3
- Version: 0.7
3
+ Version: 0.9
4
4
  Summary: Modern HTML template rendering in Python
5
5
  Author-email: The Running Algorithm <services@therunningalgorithm.info>
6
6
  License: Proprietary
File without changes
File without changes