robotcode 0.92.0__tar.gz → 0.93.0__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.
@@ -282,6 +282,8 @@ playground/
282
282
  test-results
283
283
  results.html
284
284
  report.html
285
+ log.html
286
+ output.xml
285
287
 
286
288
  # pyenv
287
289
  .python-version
@@ -2,6 +2,52 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
4
4
 
5
+ ## [0.93.0](https://github.com/robotcodedev/robotcode/compare/v0.92.0..v0.93.0) - 2024-10-08
6
+
7
+ ### Bug Fixes
8
+
9
+ - Logging of measure_time if log is disabled ([725c739](https://github.com/robotcodedev/robotcode/commit/725c739c0ed01b1249a611605c96e035467f03fa))
10
+ - Enable supportsANSIStyling in DAP to reeanble colored output in debug console ([0d5616c](https://github.com/robotcodedev/robotcode/commit/0d5616c33215ed993052d4f50e7ad41a13b21058))
11
+ - Corrected highlightning invalid sections for RF7 ([d139ff1](https://github.com/robotcodedev/robotcode/commit/d139ff1f9c309060cc12d1d7499cab1ada4a0b01))
12
+
13
+
14
+ ### Features
15
+
16
+ - **cli:** New command line interface tool - Robot Framework REPL interpreter ([be386d2](https://github.com/robotcodedev/robotcode/commit/be386d244be0b9b85ca4fbe49597985652f066db))
17
+
18
+ The new CLI command `repl` introduces an interactive Robot Framework interpreter. You can install it by running `pip install robotcode[repl]` and start it via the command line using `robotcode repl`.
19
+
20
+ With this interactive interpreter, you can execute Robot Framework keywords without the need to run a full test suite. By default, all BuiltIn keywords are immediately accessible. To load a library, you can use the `import library` keyword, and for resources or variable files, you can use the corresponding built-in commands `import resource` and `import variables`. The outcome of any keyword execution, along with relevant log details, is displayed directly in the console.
21
+
22
+ You can exit the interpreter using the `exit` keyword or by pressing `CTRL`+`D` on Unix-like systems and `CTRL+Z` followed by `ENTER` on Windows.
23
+
24
+ At this stage, the implementation is fairly basic, but additional features for the REPL command are planned. This also serves as the first step toward an exciting new feature (spoiler alert!): Robot Framework Notebooks.
25
+
26
+ - **debugger:** Increase timeouts for debugger to fit better to python debugger timeouts and introduce environment variables to override these timeouts ([63f3e4a](https://github.com/robotcodedev/robotcode/commit/63f3e4ac4d061eed95c95d615c501b2d4430e378))
27
+ - **langserver:** Resolve variable in hover for documentation settings in testcases and keywords ([ffa9bdb](https://github.com/robotcodedev/robotcode/commit/ffa9bdb2cdca47b20f56b14deaece59fc49b9a13))
28
+ - **vscode:** Introduce RobotCode: Start Terminal REPL command for launching the interactive Robot Framework interpreter directly from VSCode ([f4025fb](https://github.com/robotcodedev/robotcode/commit/f4025fb77c54ea49531c1ec67f1072c0a43c87f9))
29
+ - Improved logging with time information ([27d21b5](https://github.com/robotcodedev/robotcode/commit/27d21b599d7d5005e2920a11b47583e32f9a049c))
30
+
31
+
32
+ - Operations that take a little longer now have an indication of how long they took
33
+ - 2 new command line switches `--log-format` and `--log-style`, see also the Python logging documentation
34
+ - `--root` command line argument to specify a project root and disable autodetection of project root ([add4102](https://github.com/robotcodedev/robotcode/commit/add4102594ee73c3a93760eb4a5846358ddf2b1a))
35
+ - Add `--no-vcs` command-line option to ignore VCS directories (e.g., .git) when detecting the project root ([d7e28f2](https://github.com/robotcodedev/robotcode/commit/d7e28f2c7c7ffd42ce3d989d1ae8f4e8207d7b81))
36
+
37
+
38
+ #closes 201
39
+
40
+
41
+ ### Performance
42
+
43
+ - **langserver:** Speedup semantic highlightning a lot ([567ac72](https://github.com/robotcodedev/robotcode/commit/567ac72b393d6e42baadd575195744c5503da297))
44
+
45
+
46
+ ### Refactor
47
+
48
+ - Some performance tweaks ([d3b39be](https://github.com/robotcodedev/robotcode/commit/d3b39be576dd80d757554708fff2cd0bc40354ff))
49
+
50
+
5
51
  ## [0.92.0](https://github.com/robotcodedev/robotcode/compare/v0.91.0..v0.92.0) - 2024-10-01
6
52
 
7
53
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: robotcode
3
- Version: 0.92.0
3
+ Version: 0.93.0
4
4
  Summary: Command line interface for RobotCode
5
5
  Project-URL: Homepage, https://robotcode.io
6
6
  Project-URL: Donate, https://opencollective.com/robotcode
@@ -33,33 +33,36 @@ Classifier: Topic :: Text Editors :: Integrated Development Environments (IDE)
33
33
  Classifier: Topic :: Utilities
34
34
  Classifier: Typing :: Typed
35
35
  Requires-Python: >=3.8
36
- Requires-Dist: robotcode-core==0.92.0
37
- Requires-Dist: robotcode-plugin==0.92.0
38
- Requires-Dist: robotcode-robot==0.92.0
36
+ Requires-Dist: robotcode-core==0.93.0
37
+ Requires-Dist: robotcode-plugin==0.93.0
38
+ Requires-Dist: robotcode-robot==0.93.0
39
39
  Provides-Extra: all
40
40
  Requires-Dist: docutils; extra == 'all'
41
41
  Requires-Dist: pyyaml>=5.4; extra == 'all'
42
42
  Requires-Dist: rich; extra == 'all'
43
- Requires-Dist: robotcode-analyze==0.92.0; extra == 'all'
44
- Requires-Dist: robotcode-debugger==0.92.0; extra == 'all'
45
- Requires-Dist: robotcode-language-server==0.92.0; extra == 'all'
46
- Requires-Dist: robotcode-runner==0.92.0; extra == 'all'
43
+ Requires-Dist: robotcode-analyze==0.93.0; extra == 'all'
44
+ Requires-Dist: robotcode-debugger==0.93.0; extra == 'all'
45
+ Requires-Dist: robotcode-language-server==0.93.0; extra == 'all'
46
+ Requires-Dist: robotcode-repl==0.93.0; extra == 'all'
47
+ Requires-Dist: robotcode-runner==0.93.0; extra == 'all'
47
48
  Requires-Dist: robotframework-robocop>=2.0.0; extra == 'all'
48
49
  Requires-Dist: robotframework-tidy>=2.0.0; extra == 'all'
49
50
  Provides-Extra: analyze
50
- Requires-Dist: robotcode-analyze==0.92.0; extra == 'analyze'
51
+ Requires-Dist: robotcode-analyze==0.93.0; extra == 'analyze'
51
52
  Provides-Extra: colored
52
53
  Requires-Dist: rich; extra == 'colored'
53
54
  Provides-Extra: debugger
54
- Requires-Dist: robotcode-debugger==0.92.0; extra == 'debugger'
55
+ Requires-Dist: robotcode-debugger==0.93.0; extra == 'debugger'
55
56
  Provides-Extra: languageserver
56
- Requires-Dist: robotcode-language-server==0.92.0; extra == 'languageserver'
57
+ Requires-Dist: robotcode-language-server==0.93.0; extra == 'languageserver'
57
58
  Provides-Extra: lint
58
59
  Requires-Dist: robotframework-robocop>=2.0.0; extra == 'lint'
60
+ Provides-Extra: repl
61
+ Requires-Dist: robotcode-repl==0.93.0; extra == 'repl'
59
62
  Provides-Extra: rest
60
63
  Requires-Dist: docutils; extra == 'rest'
61
64
  Provides-Extra: runner
62
- Requires-Dist: robotcode-runner==0.92.0; extra == 'runner'
65
+ Requires-Dist: robotcode-runner==0.93.0; extra == 'runner'
63
66
  Provides-Extra: tidy
64
67
  Requires-Dist: robotframework-tidy>=2.0.0; extra == 'tidy'
65
68
  Provides-Extra: yaml
@@ -50,9 +50,9 @@ classifiers = [
50
50
  ]
51
51
  requires-python = ">=3.8"
52
52
  dependencies = [
53
- "robotcode-core==0.92.0",
54
- "robotcode-plugin==0.92.0",
55
- "robotcode-robot==0.92.0",
53
+ "robotcode-core==0.93.0",
54
+ "robotcode-plugin==0.93.0",
55
+ "robotcode-robot==0.93.0",
56
56
  ]
57
57
  dynamic = ["version"]
58
58
 
@@ -70,20 +70,22 @@ robotcode = "robotcode.cli.__main__:main"
70
70
 
71
71
 
72
72
  [project.optional-dependencies]
73
- debugger = ["robotcode-debugger==0.92.0"]
74
- languageserver = ["robotcode-language-server==0.92.0"]
75
- runner = ["robotcode-runner==0.92.0"]
76
- analyze = ["robotcode-analyze==0.92.0"]
73
+ debugger = ["robotcode-debugger==0.93.0"]
74
+ languageserver = ["robotcode-language-server==0.93.0"]
75
+ runner = ["robotcode-runner==0.93.0"]
76
+ analyze = ["robotcode-analyze==0.93.0"]
77
77
  yaml = ["PyYAML>=5.4"]
78
78
  lint = ["robotframework-robocop>=2.0.0"]
79
79
  tidy = ["robotframework-tidy>=2.0.0"]
80
80
  rest = ["docutils"]
81
+ repl = ["robotcode-repl==0.93.0"]
81
82
  colored = ["rich"]
82
83
  all = [
83
- "robotcode-debugger==0.92.0",
84
- "robotcode-language-server==0.92.0",
85
- "robotcode-runner==0.92.0",
86
- "robotcode-analyze==0.92.0",
84
+ "robotcode-debugger==0.93.0",
85
+ "robotcode-language-server==0.93.0",
86
+ "robotcode-runner==0.93.0",
87
+ "robotcode-analyze==0.93.0",
88
+ "robotcode-repl==0.93.0",
87
89
  "PyYAML>=5.4",
88
90
  "robotframework-robocop>=2.0.0",
89
91
  "robotframework-tidy>=2.0.0",
@@ -142,7 +144,7 @@ filterwarnings = "ignore:.*Using or importing the ABCs from 'collections' instea
142
144
  testpaths = ["tests"]
143
145
  junit_suite_name = "robotcode"
144
146
  # console_output_style = "classic"
145
- # log_cli = true
147
+ log_cli = true
146
148
  # log_cli_level = 4
147
149
  # log_cli_format = "%(levelname)s %(name)s: %(message)s"
148
150
  asyncio_mode = "auto"
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from pathlib import Path
3
- from typing import List, Optional
3
+ from typing import List, Literal, Optional
4
4
 
5
5
  import click
6
6
 
@@ -49,6 +49,21 @@ from .commands import config, profiles
49
49
  If not specified, the default profile is used.
50
50
  """,
51
51
  )
52
+ @click.option(
53
+ "-r",
54
+ "--root",
55
+ "root",
56
+ type=click.Path(exists=True, path_type=Path, dir_okay=True, file_okay=False, resolve_path=True),
57
+ multiple=False,
58
+ show_envvar=True,
59
+ help="Specifies the root path to be used for the project. It will be automatically detected if not provided.",
60
+ )
61
+ @click.option(
62
+ "--no-vcs",
63
+ is_flag=True,
64
+ show_envvar=True,
65
+ help="Ignore version control system directories (e.g., .git, .hg) when detecting the project root.",
66
+ )
52
67
  @click.option(
53
68
  "-f",
54
69
  "--format",
@@ -95,6 +110,22 @@ from .commands import config, profiles
95
110
  show_default=True,
96
111
  show_envvar=True,
97
112
  )
113
+ @click.option(
114
+ "--log-format",
115
+ type=str,
116
+ help="Sets the log format. See python logging documentation for more information.",
117
+ default="%(name)s:%(levelname)s: %(message)s",
118
+ show_default=True,
119
+ show_envvar=True,
120
+ )
121
+ @click.option(
122
+ "--log-style",
123
+ type=click.Choice(["%", "{", "$"]),
124
+ help="Sets the log style. See python logging documentation for more information.",
125
+ default="%",
126
+ show_default=True,
127
+ show_envvar=True,
128
+ )
98
129
  @click.option(
99
130
  "--log-filename",
100
131
  type=click.Path(
@@ -160,6 +191,8 @@ def robotcode(
160
191
  app: Application,
161
192
  config_files: Optional[List[Path]],
162
193
  profiles: Optional[List[str]],
194
+ root: Optional[Path],
195
+ no_vcs: bool,
163
196
  format: Optional[OutputFormat],
164
197
  dry: bool,
165
198
  verbose: bool,
@@ -167,6 +200,8 @@ def robotcode(
167
200
  pager: Optional[bool],
168
201
  log: bool,
169
202
  log_level: str,
203
+ log_format: str,
204
+ log_style: Literal["%", "{", "$"],
170
205
  log_filename: Optional[str],
171
206
  log_calls: bool,
172
207
  default_path: Optional[List[str]],
@@ -189,6 +224,8 @@ def robotcode(
189
224
  app.config.profiles = profiles
190
225
  app.config.dry = dry
191
226
  app.config.verbose = verbose
227
+ app.config.root = root
228
+ app.config.no_vcs = no_vcs
192
229
 
193
230
  if color is None:
194
231
  app.config.colored_output = ColoredOutput.AUTO
@@ -210,7 +247,8 @@ def robotcode(
210
247
 
211
248
  logging.basicConfig(
212
249
  level=log_level,
213
- format="%(name)s:%(levelname)s: %(message)s",
250
+ format=log_format,
251
+ style=log_style,
214
252
  filename=log_filename,
215
253
  )
216
254
 
@@ -0,0 +1 @@
1
+ __version__ = "0.93.0"
@@ -2,7 +2,7 @@ import dataclasses
2
2
  import os
3
3
  from fnmatch import fnmatchcase
4
4
  from pathlib import Path
5
- from typing import Any, Callable, Dict, Iterable, List, Optional, Type, Union, get_args, get_origin
5
+ from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Type, Union, get_args, get_origin
6
6
 
7
7
  import click
8
8
 
@@ -64,7 +64,13 @@ def show(app: Application, single: bool, paths: List[Path]) -> None:
64
64
  ```
65
65
  """
66
66
  try:
67
- config_files, _, _ = get_config_files(paths, app.config.config_files, verbose_callback=app.verbose)
67
+ config_files, _, _ = get_config_files(
68
+ paths,
69
+ app.config.config_files,
70
+ root_folder=app.config.root,
71
+ no_vcs=app.config.no_vcs,
72
+ verbose_callback=app.verbose,
73
+ )
68
74
 
69
75
  if single:
70
76
  for file, _ in config_files:
@@ -123,7 +129,13 @@ def files(app: Application, paths: List[Path], user: bool = False) -> None:
123
129
  """
124
130
 
125
131
  try:
126
- config_files, _, discovered_by = get_config_files(paths, app.config.config_files, verbose_callback=app.verbose)
132
+ config_files, _, discovered_by = get_config_files(
133
+ paths,
134
+ app.config.config_files,
135
+ root_folder=app.config.root,
136
+ no_vcs=app.config.no_vcs,
137
+ verbose_callback=app.verbose,
138
+ )
127
139
 
128
140
  result: Dict[str, Any] = {"files": [{"path": str(file), "type": type} for file, type in config_files]}
129
141
 
@@ -153,7 +165,7 @@ def files(app: Application, paths: List[Path], user: bool = False) -> None:
153
165
  required=False,
154
166
  )
155
167
  @pass_application
156
- def root(app: Application, paths: List[Path]) -> None:
168
+ def root(app: Application, paths: Tuple[Path, ...]) -> None:
157
169
  """\
158
170
  Searches for the root folder of the project and prints them.
159
171
 
@@ -168,7 +180,9 @@ def root(app: Application, paths: List[Path]) -> None:
168
180
  ```
169
181
  """
170
182
 
171
- root_folder, discovered_by = find_project_root(*(paths or []))
183
+ root_folder, discovered_by = find_project_root(
184
+ *(paths or []), root_folder=app.config.root, no_vcs=app.config.no_vcs
185
+ )
172
186
 
173
187
  if root_folder is None and (app.config.output_format is None or app.config.output_format == OutputFormat.TEXT):
174
188
  raise click.ClickException("Cannot detect root folder. 😥")
@@ -40,7 +40,9 @@ def profiles() -> None:
40
40
  def show(app: Application, no_evaluate: bool, paths: List[Path]) -> None:
41
41
  """Shows the given profile configuration."""
42
42
  try:
43
- config_files, _, _ = get_config_files(paths, app.config.config_files, verbose_callback=app.verbose)
43
+ config_files, _, _ = get_config_files(
44
+ paths, app.config.config_files, root_folder=app.config.root, verbose_callback=app.verbose
45
+ )
44
46
 
45
47
  config = load_robot_config_from_path(*config_files, verbose_callback=app.verbose).combine_profiles(
46
48
  *(app.config.profiles or []), verbose_callback=app.verbose, error_callback=app.error
@@ -73,7 +75,13 @@ def list(app: Application, paths: List[Path], show_hidden: bool = False, sort_by
73
75
  """Lists the defined profiles in the current configuration."""
74
76
 
75
77
  try:
76
- config_files, _, discovered_by = get_config_files(paths, app.config.config_files, verbose_callback=app.verbose)
78
+ config_files, _, discovered_by = get_config_files(
79
+ paths,
80
+ app.config.config_files,
81
+ root_folder=app.config.root,
82
+ no_vcs=app.config.no_vcs,
83
+ verbose_callback=app.verbose,
84
+ )
77
85
 
78
86
  config = load_robot_config_from_path(*config_files, verbose_callback=app.verbose)
79
87
 
@@ -1 +0,0 @@
1
- __version__ = "0.92.0"
File without changes
File without changes
File without changes