pyqt-code-editor 0.0.59__tar.gz → 0.0.60__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 (91) hide show
  1. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/PKG-INFO +1 -1
  2. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/__init__.py +1 -1
  3. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/sigmund/sigmund_analyst_chat_widget.py +1 -1
  4. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/sigmund/sigmund_analyst_widget.py +14 -1
  5. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/search_replace.py +8 -1
  6. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/COPYING +0 -0
  7. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyproject.toml +0 -0
  8. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/_settings.py +0 -0
  9. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/app.py +0 -0
  10. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/code_editors/__init__.py +0 -0
  11. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/code_editors/code_editors.py +0 -0
  12. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/code_editors/languages/__init__.py +0 -0
  13. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/code_editors/languages/generic.py +0 -0
  14. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/code_editors/languages/javascript.py +0 -0
  15. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/code_editors/languages/markdown.py +0 -0
  16. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/code_editors/languages/python.py +0 -0
  17. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/code_editors/languages/text.py +0 -0
  18. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/__init__.py +0 -0
  19. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/editor_panel.py +0 -0
  20. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/find_in_files.py +0 -0
  21. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/jupyter_console/__init__.py +0 -0
  22. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/jupyter_console/jupyter_console.py +0 -0
  23. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/jupyter_console/jupyter_console_tab.py +0 -0
  24. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/jupyter_console/kernel_spec_manager.py +0 -0
  25. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/project_explorer.py +0 -0
  26. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/settings_panel.py +0 -0
  27. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/sigmund/__init__.py +0 -0
  28. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/sigmund/confirm_run_code_dialog.py +0 -0
  29. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/sigmund/editor_workspace.py +0 -0
  30. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/sigmund/sigmund.py +0 -0
  31. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/components/workspace_explorer.py +0 -0
  32. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/environment_manager.py +0 -0
  33. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/__init__.py +0 -0
  34. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/auto_indent.py +0 -0
  35. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/auto_pair.py +0 -0
  36. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/base.py +0 -0
  37. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/check.py +0 -0
  38. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/comment.py +0 -0
  39. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/complete.py +0 -0
  40. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/execute.py +0 -0
  41. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/file_link.py +0 -0
  42. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/highlight_matching_brackets.py +0 -0
  43. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/line_number.py +0 -0
  44. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/merge_undo_actions.py +0 -0
  45. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/python_auto_indent.py +0 -0
  46. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/shortcuts.py +0 -0
  47. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/smart_backspace_delete.py +0 -0
  48. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/symbols.py +0 -0
  49. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/theme.py +0 -0
  50. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/widgets/__init__.py +0 -0
  51. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/mixins/zoom.py +0 -0
  52. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/sigmund-analyst.png +0 -0
  53. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/signal_router.py +0 -0
  54. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/syntax_highlighters/__init__.py +0 -0
  55. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/syntax_highlighters/languages/__init__.py +0 -0
  56. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/syntax_highlighters/languages/generic.py +0 -0
  57. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/syntax_highlighters/languages/python.py +0 -0
  58. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/syntax_highlighters/syntax_highlighter.py +0 -0
  59. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/themes.py +0 -0
  60. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/utils/__init__.py +0 -0
  61. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/utils/languages/__init__.py +0 -0
  62. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/utils/languages/python/__init__.py +0 -0
  63. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/utils/languages/python/_auto_indent.py +0 -0
  64. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/utils/languages/python/_extract_cells.py +0 -0
  65. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/utils/languages/python/_mask_str_in_code.py +0 -0
  66. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/watchdog.py +0 -0
  67. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/__init__.py +0 -0
  68. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/calltip_widget.py +0 -0
  69. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/completion_popup.py +0 -0
  70. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/dock.py +0 -0
  71. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/quick_open_dialog.py +0 -0
  72. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/quick_open_file_dialog.py +0 -0
  73. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/quick_symbol_dialog.py +0 -0
  74. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/search_replace_frame.py +0 -0
  75. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/tab_splitter.py +0 -0
  76. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/widgets/tabbed_editor.py +0 -0
  77. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/__init__.py +0 -0
  78. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/languages/__init__.py +0 -0
  79. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/languages/generic.py +0 -0
  80. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/languages/python.py +0 -0
  81. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/manager.py +0 -0
  82. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/process.py +0 -0
  83. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/providers/__init__.py +0 -0
  84. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/providers/codestral.py +0 -0
  85. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/providers/jedi.py +0 -0
  86. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/providers/ruff.py +0 -0
  87. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/providers/sigmund.py +0 -0
  88. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/providers/symbol.py +0 -0
  89. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/providers/tree_sitter.py +0 -0
  90. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/pyqt_code_editor/worker/settings.py +0 -0
  91. {pyqt_code_editor-0.0.59 → pyqt_code_editor-0.0.60}/readme.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqt_code_editor
3
- Version: 0.0.59
3
+ Version: 0.0.60
4
4
  Summary: Fully featured code-editor widgets for PyQt
5
5
  Keywords: code editor,pyqt,ide
6
6
  Author-email: Sebastiaan Mathôt <s.mathot@cogsci.nl>
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._settings import settings
4
4
 
5
- __version__ = '0.0.59'
5
+ __version__ = '0.0.60'
@@ -61,5 +61,5 @@ class SigmundAnalystChatWidget(ChatWidget):
61
61
 
62
62
  def append_message(self, msg_type, text, scroll=True):
63
63
  if msg_type == 'ai' and '(Suggesting IDE action)' in text:
64
- text = '⚙️ Sigmund is working …'
64
+ text = f'⚙️ Sigmund is working …\n\n{text}'
65
65
  self._chat_browser.append_message(msg_type, text, scroll)
@@ -42,6 +42,14 @@ class SigmundAnalystWidget(SigmundWidget):
42
42
  self._execution_loop = None
43
43
  self._working_directory = None
44
44
 
45
+ def _resolve_path(self, path):
46
+ """Resolve a path relative to the current working directory.
47
+ Absolute paths are returned unchanged.
48
+ """
49
+ if self._working_directory is not None and not os.path.isabs(path):
50
+ return os.path.join(self._working_directory, path)
51
+ return path
52
+
45
53
  def _confirm_action(self, action_type, details):
46
54
  """Show a confirmation dialog for the proposed action.
47
55
 
@@ -77,6 +85,7 @@ class SigmundAnalystWidget(SigmundWidget):
77
85
  self._execution_loop.quit()
78
86
 
79
87
  def run_command_open_file(self, path):
88
+ path = self._resolve_path(path)
80
89
  if settings.sigmund_review_actions:
81
90
  if not QMessageBox.question(self,
82
91
  "Confirm open file",
@@ -94,6 +103,7 @@ class SigmundAnalystWidget(SigmundWidget):
94
103
  def run_command_inspect_files(self, paths, encoding='utf-8'):
95
104
  results = []
96
105
  for path in paths:
106
+ path = self._resolve_path(path)
97
107
  try:
98
108
  with open(path, 'r', encoding=encoding) as f:
99
109
  contents = f.read()
@@ -105,6 +115,7 @@ class SigmundAnalystWidget(SigmundWidget):
105
115
  return '\n\n'.join(results)
106
116
 
107
117
  def run_command_list_files(self, path, recursive=False, max_files=250):
118
+ path = self._resolve_path(path)
108
119
  lines = []
109
120
  try:
110
121
  if recursive:
@@ -262,6 +273,8 @@ class SigmundAnalystWidget(SigmundWidget):
262
273
  working_directory_contents = f"(Could not read directory contents: {str(e)})"
263
274
 
264
275
  system_prompt = f'''## Working directory
276
+
277
+ IMPORTANT: Do NOT call inspect_files() with {current_path}, because it is already in the workspace.
265
278
 
266
279
  The workspace corresponds to the following file: {current_path}
267
280
  The working directory is: {working_directory}
@@ -275,4 +288,4 @@ Overview of working directory:
275
288
  self._transient_system_prompt = system_prompt
276
289
  self._working_directory = working_directory
277
290
  super().send_user_message(text, *args, **kwargs)
278
- self._attachments = None
291
+ self._attachments = None
@@ -5,8 +5,11 @@ from qtpy.QtGui import (
5
5
  QTextCursor, QKeySequence, QTextDocument
6
6
  )
7
7
  from qtpy.QtCore import Qt
8
+ import logging
8
9
  from .. import settings
9
10
  from ..widgets.search_replace_frame import SearchReplaceFrame
11
+ logger = logging.getLogger(__name__)
12
+
10
13
 
11
14
  class SearchReplaceHighlighter(QSyntaxHighlighter):
12
15
  """
@@ -390,7 +393,11 @@ class SearchReplace:
390
393
  text_before = text[:cursor_pos]
391
394
 
392
395
  # Apply replacement to full text
393
- new_text, num_replacements = compiled.subn(replacement, text)
396
+ try:
397
+ new_text, num_replacements = compiled.subn(replacement, text)
398
+ except re.error as e:
399
+ logging.error(f"Regex error during replacement: {e}")
400
+ return
394
401
 
395
402
  # Apply replacement to just the before portion to calculate position change
396
403
  new_text_before, _ = compiled.subn(replacement, text_before)