robotcode 2.4.0__tar.gz → 2.5.1__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.
@@ -334,4 +334,8 @@ bundled/libs
334
334
  results/
335
335
 
336
336
  # kilocode
337
- .kilocode/
337
+ .kilocode/
338
+
339
+ # .agents
340
+ .agents/
341
+ skills-lock.json
@@ -2,6 +2,408 @@
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
+ ## [2.5.1](https://github.com/robotcodedev/robotcode/compare/v2.5.0..v2.5.1) - 2026-04-01
6
+
7
+ ### Bug Fixes
8
+
9
+ - **analyzer:** Do not report embedded arguments as VariableNotFound in template keywords ([c34455f](https://github.com/robotcodedev/robotcode/commit/c34455fe3a2a485bf361b65a6b52b55650d674b7))
10
+
11
+ When a test case uses [Template] or Test Template with a keyword that has
12
+ embedded arguments (e.g. "The result of ${calculation} should be ${expected}"),
13
+ the embedded argument placeholders were incorrectly analyzed as unresolved
14
+ variables, producing false VariableNotFound diagnostics.
15
+
16
+ Skip variable analysis for embedded argument tokens when the keyword call
17
+ originates from a template declaration.
18
+
19
+ - **robot:** Match longest BDD prefix first for multi-word prefixes ([dad536e](https://github.com/robotcodedev/robotcode/commit/dad536ecc44e4cdad9f222b3387f276dc7e6ee0a))
20
+
21
+ French BDD prefixes like "Étant donné que", "Et que",
22
+ "Mais que" were not fully recognized because shorter prefixes (e.g.
23
+ "Et") matched before longer ones (e.g. "Et que").
24
+
25
+ Replaced manual iteration and set lookups with a regex-based approach
26
+ matching Robot Framework's own strategy: prefixes sorted by length
27
+ (longest first), compiled into a cached regex pattern. This applies to
28
+ keyword_finder, model_helper (split/strip/is_bdd), and semantic tokens.
29
+
30
+ - **robot:** Fix ${CURDIR} replacement in variable values and unify handling ([13bf36b](https://github.com/robotcodedev/robotcode/commit/13bf36b8639887ff21d807a0045f8432b81fce8c))
31
+
32
+ Extract replace_curdir_in_variable_values() helper into utils/variables.py
33
+ to deduplicate the ${CURDIR} substitution logic from _MyResourceBuilder and
34
+ NamespaceAnalyzer. Fixes incorrect double-backslash escaping in
35
+ _MyResourceBuilder that caused ${CURDIR} resolution to fail on Windows.
36
+
37
+
38
+
39
+ ### Documentation
40
+
41
+ - **news:** Add v2.5.1 release notes ([b0d9fb9](https://github.com/robotcodedev/robotcode/commit/b0d9fb94fc6dc36ae4ff9fba0f8a5c3ba3888dd0))
42
+
43
+
44
+ ### Refactor
45
+
46
+ - **diagnostics:** Add debug logging for namespace cache misses ([99e322d](https://github.com/robotcodedev/robotcode/commit/99e322d8d9be298fbb22bb46d2283fa2db26e223))
47
+
48
+ Log specific reasons when namespace cache entries are invalidated,
49
+ including source mtime changes, config fingerprint mismatches, and
50
+ dependency changes (libraries, resources, variables). Uses debug
51
+ level with context_name="cache" for targeted activation.
52
+
53
+
54
+
55
+ ## [2.5.0](https://github.com/robotcodedev/robotcode/compare/v2.4.0..v2.5.0) - 2026-03-31
56
+
57
+ ### Bug Fixes
58
+
59
+ - **robot:** Strip trailing `=` from variable names in resource builder ([e11ca60](https://github.com/robotcodedev/robotcode/commit/e11ca6061ecf7b1659e74a72ddecb6baadc545a3))
60
+ - **robot:** Do not override the source on a model if there is already a source field ([7e74c2d](https://github.com/robotcodedev/robotcode/commit/7e74c2dfbe57367edacc81fd0f6460d23337eccc))
61
+
62
+ Newer Robot Framework versions already set the source field on File AST blocks, so overriding it here is unnecessary.
63
+
64
+ - **robot:** Resolve relative library paths in namespace cache validation ([45d8f9f](https://github.com/robotcodedev/robotcode/commit/45d8f9f92a01987955df48325ea16f4a10fbcf75))
65
+
66
+ Namespace cache validation failed for files importing libraries via
67
+ relative paths (e.g. ../../resources/libraries/common.py), causing
68
+ unnecessary full rebuilds on every warm start.
69
+
70
+ Two issues fixed:
71
+ - validate_namespace_meta now passes the source file's directory as
72
+ base_dir when falling back to get_library_meta/get_variables_meta,
73
+ so relative paths resolve correctly
74
+ - get_library_meta and get_variables_meta initialize import_name
75
+ before the try block to avoid UnboundLocalError when find_library
76
+ or find_variables fails
77
+
78
+ - **robot:** Correct check for __init__.py file in _is_valid_file function ([ffad219](https://github.com/robotcodedev/robotcode/commit/ffad219d9bc4311a2f1a70d272feb942467b1bfb))
79
+ - **robot:** Add lock for _workspace_languages to prevent race condition ([9bf0ee6](https://github.com/robotcodedev/robotcode/commit/9bf0ee619d20d1f676b35797867260aab924a2af))
80
+
81
+ WeakKeyDictionary is not thread-safe for concurrent read/write.
82
+ Protect all access to _workspace_languages with a dedicated RLock.
83
+
84
+
85
+
86
+ ### Documentation
87
+
88
+ - **news:** Add supplementary release note for v2.5.0 ([a8c39a3](https://github.com/robotcodedev/robotcode/commit/a8c39a377a74db9fe2a93e165415d0e805470d2d))
89
+ - Update release notes for v2.5.0 with ([9978a88](https://github.com/robotcodedev/robotcode/commit/9978a8869359ca7dbfbbde7ac3ddc96dd1eb1996))
90
+ - Add news section to documentation site ([7f14925](https://github.com/robotcodedev/robotcode/commit/7f1492508bef6f487e31bbd8f532449d7c05d392))
91
+
92
+
93
+ Add a dedicated news section for release announcements with
94
+ auto-generated sidebar (sorted newest-first), content loader,
95
+ and redirect from /news/ to the latest article.
96
+
97
+
98
+ ### Features
99
+
100
+ - **analyze:** Add cache management CLI commands ([1421107](https://github.com/robotcodedev/robotcode/commit/1421107e20473b441861958feca96262832946bb))
101
+
102
+ Add `robotcode analyze cache` subcommand group with five commands:
103
+ - `path`: print resolved cache directory
104
+ - `info`: show cache statistics with per-section breakdown
105
+ - `list`: list cached entries with glob pattern filtering (-p)
106
+ - `clear`: remove cached entries by section
107
+ - `prune`: delete entire .robotcode_cache directory
108
+
109
+ Output adapts to the global --format flag (text/json/toml) and
110
+ --no-color mode. Text output uses rich-rendered markdown tables
111
+ when color is enabled, plain aligned tables otherwise.
112
+
113
+ - **analyze:** Enable namespace caching by default ([d896213](https://github.com/robotcodedev/robotcode/commit/d8962139775144697c2d3e41fe37f6595bc272d6))
114
+
115
+ Namespace caching speeds up startup for large projects by skipping
116
+ re-analysis of unchanged files. It is now mature enough to be enabled
117
+ by default.
118
+
119
+ - **analyze:** Add --cache-namespaces/--no-cache-namespaces CLI option ([b050c32](https://github.com/robotcodedev/robotcode/commit/b050c32e94989f638ec0cfcafe5122bfdf3a4945))
120
+
121
+ Add option to enable/disable caching of fully analyzed namespace data
122
+ to disk. Disabled by default until the cache is fully optimized and
123
+ validated. When enabled, skips re-analysis of unchanged files on
124
+ startup, which can significantly speed up large projects.
125
+
126
+ Available as CLI flag (--cache-namespaces/--no-cache-namespaces),
127
+ robot.toml setting (tool.robotcode-analyze.cache.cache_namespaces),
128
+ and VS Code setting (robotcode.analysis.cache.cacheNamespaces).
129
+
130
+ - **analyze:** Add collection of unused keywords and variables on the CLI ([5734690](https://github.com/robotcodedev/robotcode/commit/5734690b4a9a627306751c704b6fc0934739a1fc))
131
+
132
+ Add support for collecting unused keyword and variable diagnostics when
133
+ running `robotcode analyze code` from the command line.
134
+
135
+ The feature can be enabled in `robot.toml`:
136
+
137
+ ```toml
138
+ [tool.robotcode-analyze.code]
139
+ collect-unused = true
140
+ ```
141
+
142
+ or controlled directly per invocation:
143
+
144
+ ```bash
145
+ robotcode analyze code --collect-unused
146
+ robotcode analyze code --no-collect-unused
147
+ ```
148
+
149
+ - **langserver:** Add code completion for `Literal` type hint values ([42ab3a0](https://github.com/robotcodedev/robotcode/commit/42ab3a073e562c21474d39667ef653948128abe6))
150
+
151
+ Keywords with `Literal["fast", "slow", "auto"]` type hints now show
152
+ their allowed values in the completion list, making it easier to
153
+ discover and select valid argument values without checking the
154
+ keyword documentation.
155
+
156
+ Also supports `Union` types containing `Literal`, e.g.
157
+ `Union[Literal["x", "y"], int]`.
158
+
159
+ - **language_server:** Add json to watched file extensions ([74e92b0](https://github.com/robotcodedev/robotcode/commit/74e92b00ef947291e7e6bd0fe09f37b919292b85))
160
+ - **plugin:** Add `has_rich` property to detect `rich` availability ([4581cc6](https://github.com/robotcodedev/robotcode/commit/4581cc6e7594798a28c0795a0f56b7e5fca62a9b))
161
+
162
+ Fall back to plain-text output in cache CLI commands when the `rich`
163
+ package is not installed, instead of dumping raw unformatted markdown.
164
+
165
+ - **robot:** Add `ROBOTCODE_CACHE_DIR` env var for cache path override ([a778cd5](https://github.com/robotcodedev/robotcode/commit/a778cd58542b841966047278ad6fa91049f38c25))
166
+
167
+ Enable redirecting the analysis cache to a custom directory via the
168
+ `ROBOTCODE_CACHE_DIR` environment variable. This allows all RobotCode
169
+ tools — CLI commands, analyze runs, and the language server — to
170
+ share the same cache regardless of where it is stored.
171
+
172
+ The VS Code extension automatically sets this variable in the
173
+ integrated terminal, so CLI commands find the correct cache
174
+ without any manual setup.
175
+
176
+ Cache clearing now operates on the database directly instead of
177
+ removing the directory, preventing errors when multiple processes
178
+ access the cache concurrently.
179
+
180
+ - **robot:** Add advisory file locking to SQLite cache ([b9351fc](https://github.com/robotcodedev/robotcode/commit/b9351fc3f4c9515e56ebfbd13a9b744ac88bee52))
181
+
182
+ Add shared/exclusive advisory file locking (fcntl.flock) to prevent
183
+ `prune` from deleting a cache database while another process (language
184
+ server, analyze run) is using it.
185
+
186
+ - **robot:** Add SQLite cache backend for library and namespace data ([edaea47](https://github.com/robotcodedev/robotcode/commit/edaea473b9d51f52b1a91c705facf2a31ad571c3))
187
+
188
+ Replace file-based pickle caching with a single SQLite database per
189
+ workspace, consolidating all cache entries into one file instead of
190
+ many individual .pkl files scattered across directories.
191
+
192
+ - **robot:** Add namespace disk cache for cold-start acceleration ([abf3387](https://github.com/robotcodedev/robotcode/commit/abf33871b16b1b344c85c2ae77a344a2a5dcd6b1))
193
+
194
+ Speed up first-time file analysis by caching fully resolved
195
+ namespace results to disk. On subsequent IDE starts, cached
196
+ namespaces are reused instead of re-analyzing every file from
197
+ scratch, significantly reducing the time until diagnostics,
198
+ code completion, and navigation become available.
199
+
200
+ The cache is automatically invalidated when source files,
201
+ library dependencies, environment variables, command-line
202
+ variables, language configuration, or the RobotCode version
203
+ change.
204
+
205
+ - **robot:** Add ProjectIndex for O(1) workspace-wide reference lookups ([6ef90f1](https://github.com/robotcodedev/robotcode/commit/6ef90f111f367af51924f1f991ba02ae6e807298))
206
+
207
+ Add an incrementally maintained inverse reference index (ProjectIndex)
208
+ scoped per WorkspaceFolder. On each file build, references are updated
209
+ in-place instead of scanning all files. All six reference types are
210
+ supported: keywords, variables, namespace entries, keyword tags,
211
+ testcase tags, and metadata.
212
+
213
+ - **robot:** Track tag and metadata references in namespace analysis ([6a372fe](https://github.com/robotcodedev/robotcode/commit/6a372febb092055b4fec4528b5f5870233c854da))
214
+
215
+ Add structured reference tracking for tags and metadata during analysis.
216
+ Tags are split into keyword_tag_references and testcase_tag_references
217
+ to reflect their different semantics in Robot Framework (keyword visibility
218
+ vs test selection/reporting). Metadata references track settings-level
219
+ metadata entries by key. All reference keys are normalized for consistent
220
+ lookups. Remove unused TagDefinition class.
221
+
222
+ - **settings:** Remove deprecated robocop configuration options ([fa2217e](https://github.com/robotcodedev/robotcode/commit/fa2217eaeae800023c6961970ee93ec715f28d53))
223
+ - **vscode:** Show "What's New" notification after extension update ([7fb2071](https://github.com/robotcodedev/robotcode/commit/7fb2071104be976d0099f54c65aa58476e01a806))
224
+
225
+ Display an info notification when the extension version changes,
226
+ linking to the news page on robotcode.io via the built-in Simple Browser.
227
+ Also adds a public "RobotCode: Show What's New" command to the palette.
228
+
229
+
230
+
231
+ ### Performance
232
+
233
+ - **cache:** Defer data blob loading in CacheEntry until first access ([795c420](https://github.com/robotcodedev/robotcode/commit/795c42073b49071eabc9a8afd4c4e7eb1659dceb))
234
+ - **diagnostics:** Remove redundant exists() check in get_resource_meta ([5696868](https://github.com/robotcodedev/robotcode/commit/569686849ffc2f286e3af93095cfef8e5b5767ce))
235
+ - **diagnostics:** Consolidate to single AST model and remove data_only parameter ([e2e4cbd](https://github.com/robotcodedev/robotcode/commit/e2e4cbd04d58d2d775742c0fddaee63f948c335d))
236
+
237
+ This eliminates the second cached AST model per document, saving ~500KB/doc
238
+ in CLI and ~200KB/doc in the Language Server. Releasing the model reference
239
+ after analysis frees an additional ~100-500KB/doc in CLI mode.
240
+
241
+ - **imports:** Cache get_module_spec results in ImportsManager ([fa83b30](https://github.com/robotcodedev/robotcode/commit/fa83b3045dc4f87f91952bb1ab0ec64e492be28a))
242
+ - **robot:** Patch RF's variable_not_found to skip slow RecommendationFinder ([78a26c3](https://github.com/robotcodedev/robotcode/commit/78a26c3004717f06edadda114d8d196fd9729e7e))
243
+
244
+ Robot Framework's variable_not_found() calls RecommendationFinder for
245
+ fuzzy "Did you mean...?" suggestions on every unresolved variable. This
246
+ is O(n*m) over all variable candidates and extremely slow for large
247
+ projects (see #587: 30+ min for 375 files).
248
+
249
+ RobotCode never uses the recommendation text — all VariableError catch
250
+ sites either ignore the error or use it for unrelated diagnostics.
251
+
252
+ The monkey-patch replaces variable_not_found in all 5 RF modules that
253
+ import it (notfound, finders, evaluation, store, __init__) with a fast
254
+ version that raises VariableError with just the base message.
255
+
256
+ - **robot:** Speed up namespace cache loading with source hints and top-level-only imports ([1d4ba6b](https://github.com/robotcodedev/robotcode/commit/1d4ba6b73f0e1b57341b5f116084c0ab0902dcc7))
257
+
258
+ Add resolved_resource_sources to NamespaceData that maps import hint
259
+ keys to resolved file paths. During from_data() re-resolution, these
260
+ hints skip expensive find_resource() filesystem searches when the
261
+ cached path still exists on disk.
262
+
263
+ Also limit cached imports to top-level only (recursive imports are
264
+ re-discovered during resolution), replace Path-based normalization
265
+ with string-only os.path calls in imports_manager, and add a hint_key
266
+ property to Import for consistent key computation.
267
+
268
+ - **robot:** Fix ArgumentSpec.resolve() caching bug for RobotArgumentSpec ([05142c8](https://github.com/robotcodedev/robotcode/commit/05142c821a64136453a1388c2d30dccb08093bd7))
269
+
270
+ The RobotArgumentSpec was recreated on every call (100K times) because:
271
+ - hasattr() always returned False with @dataclass(slots=True)
272
+ - Assignment went to a local variable instead of self
273
+
274
+ RobotArgumentSpec.__init__ calls: 100K → 1.3K (-98.7%)
275
+ resolve cumtime: 3.93s → 3.29s (-0.64s)
276
+ Warm no-NS total: 30.78s → 29.81s (-0.97s, -3.2%)
277
+
278
+ - **robot:** Replace pathlib with os.path in file resolution ([f3118bd](https://github.com/robotcodedev/robotcode/commit/f3118bd2d5213f0e6404e476025a40799205c383))
279
+
280
+ Replace pathlib.Path operations with os.path string functions
281
+ in robot_path.py for significantly faster file resolution:
282
+
283
+ - Use os.path.join/abspath/isfile/isdir instead of Path objects
284
+ - Cache validated sys.path entries lazily (_get_valid_sys_path)
285
+ - Separate basedir check from sys.path iteration
286
+ - Introduce _PathLike type alias for cleaner signatures
287
+ - Fix is_fifo() bug: use os.path.isfile() for __init__.py check
288
+
289
+ Warm namespace-cache scenario: 19.30s -> 13.84s (-28.3%).
290
+ Pathlib calls reduced by 78-100%, posix.stat calls by 35%.
291
+
292
+ - **robot:** Cache KeywordMatcher and add dict-index to KeywordStore ([5d21baf](https://github.com/robotcodedev/robotcode/commit/5d21bafb711091112d473f3d5c9c47865a22796d))
293
+
294
+ - Cache KeywordMatcher on KeywordDoc via lazy-init _matcher slot,
295
+ eliminating 7.5M redundant instantiations per analysis run
296
+ - Add dict-index (_index + _embedded) to KeywordStore for O(1)
297
+ keyword lookup by normalized name; linear scan only for embedded
298
+ keywords
299
+ - Add __getstate__/__setstate__ to KeywordDoc and KeywordStore to
300
+ exclude transient fields (_matcher, _index, _embedded, parent,
301
+ _hash_value, _stable_id) from pickle serialization
302
+ - Restore parent references in LibraryDoc.__setstate__ via
303
+ _update_keywords after deserialization
304
+ - Remove unused nosave metadata from argument_definitions, parent,
305
+ and keyword_doc fields
306
+ - Fix Application.keyboard_interrupt to use self.exit() for
307
+ consistent shutdown behavior
308
+
309
+ Measured improvement (cProfile, 1065 Robot files):
310
+ - Warm no-NS: 37.46s -> 29.25s (-22%)
311
+ - Cold no-NS: 42.94s -> 33.39s (-22%)
312
+ - Keyword matching: ~9.0s -> ~0.5s (-94%)
313
+ - Function calls: 118M -> 81M (-31%)
314
+
315
+ - **robot:** Optimize dataclass identity for ProjectIndex caching ([deedd7b](https://github.com/robotcodedev/robotcode/commit/deedd7be944b426f4f9d65ff90fbfae464f33086))
316
+
317
+ Prepare VariableDefinition, KeywordDoc, and LibraryDoc for efficient
318
+ use as dictionary keys in the upcoming ProjectIndex disk cache and
319
+ cross-process worker communication.
320
+
321
+
322
+
323
+ ### Refactor
324
+
325
+ - **cache:** Optimize SqliteDataCache with lazy deserialization and per-section tables ([eeec613](https://github.com/robotcodedev/robotcode/commit/eeec61379aa9bca255389d8f60246a140b0bc0db))
326
+
327
+ Replace single cache_entries table with per-section tables (libdoc,
328
+ variables, resource, namespace) for better query performance.
329
+
330
+ Introduce CacheEntry with lazy meta/data deserialization — data blobs
331
+ are only unpickled on cache hit, avoiding expensive deserialization on
332
+ meta mismatch.
333
+
334
+ Move version checking from per-entry meta_version field to DB-level
335
+ app_version parameter. On version mismatch all tables are dropped and
336
+ recreated automatically.
337
+
338
+ Simplify cache API from 3 methods (cache_data_exists, read_cache_data,
339
+ save_cache_data) to 2 (read_entry, save_entry), reducing DB
340
+ round-trips from 3 to 1 for reads and 2 to 1 for writes.
341
+
342
+ Remove filepath_base property (adler32 hash-based keys) from all
343
+ metadata classes — cache keys now use source paths or library names
344
+ directly.
345
+
346
+ - **diagnostics:** Extract _run_in_subprocess and _save_import_cache helpers ([0c347fd](https://github.com/robotcodedev/robotcode/commit/0c347fd9a55f4e9cca8a86628addd297df52e468))
347
+
348
+ - Unify duplicated ProcessPoolExecutor lifecycle from
349
+ _get_library_libdoc and _get_variables_libdoc into _run_in_subprocess
350
+ - Unify duplicated cache save logic into _save_import_cache
351
+
352
+ - **diagnostics:** Deduplicate and optimize metadata classes in imports_manager ([a0cb4c6](https://github.com/robotcodedev/robotcode/commit/a0cb4c6820f895e2e56bbeb20a406ba2270f2a46))
353
+
354
+ - Extract _collect_library_mtimes() to unify duplicated mtime collection
355
+ from get_library_meta and get_variables_meta, using os.walk instead of
356
+ Path.rglob for better performance
357
+ - Extract _matches_any_pattern() to unify triplicated pattern matching
358
+ - Add slots=True to LibraryMetaData, RobotFileMeta, and NamespaceMetaData
359
+ - Move mtime collection into dataclass constructors to avoid post-init mutation
360
+ - Remove unused itertools import
361
+
362
+ - **jsonrpc2:** Harden resource lifecycle without __del__ ([5cb7bb7](https://github.com/robotcodedev/robotcode/commit/5cb7bb71fac305a8dc7039187c4b076ab7d90bbd))
363
+
364
+ - remove __del__-based resource cleanup from server, debugger client, and protocol
365
+ - move shutdown to explicit close/close_async paths
366
+ - make JsonRPCServer.close wait for server shutdown when safe
367
+ - add best-effort weakref finalizers for forgotten cleanup without noisy warnings
368
+ - unify runtime and finalizer bookkeeping into shared state objects
369
+
370
+ - **robot:** Remove unnecessary type casting in CacheEntry ([c4eb160](https://github.com/robotcodedev/robotcode/commit/c4eb160b6d02ce95e51f3c0084cdf9ccf209bd75))
371
+ - **robot:** Optimize RF_VERSION checks with module-level dispatch ([eec1627](https://github.com/robotcodedev/robotcode/commit/eec1627f7777d17b8928ea6678b7905b9f933d5e))
372
+
373
+ - Remove redundant _ROBOT_VERSION alias in semantic_tokens.py
374
+ - Remove always-true RF >= 5.0 guards (minimum supported version)
375
+ - Use conditional class-level property/method definitions for
376
+ is_private and is_reserved in library_doc.py
377
+ - Add _RF7_PLUS module-level bool for BDD keyword search hot path
378
+ - Move ExceptHeader/WhileHeader imports to top-level (always available)
379
+
380
+ - **robot:** Replace Namespace getter methods with read-only properties ([127ad65](https://github.com/robotcodedev/robotcode/commit/127ad6550e691011b8916620b28765c5b3c039ed))
381
+ - **robot:** Extract Namespace into DTO with event-driven invalidation ([4f37419](https://github.com/robotcodedev/robotcode/commit/4f3741906798e9ff5a5263c7f1a8413b4e55ff66))
382
+
383
+ Split the monolithic Namespace class into focused modules to reduce
384
+ complexity and improve maintainability. The Namespace is now a pure data
385
+ container built by NamespaceBuilder, with dedicated modules for import
386
+ resolution, AST analysis, variable scoping, and scope trees.
387
+
388
+ - Introduce RF_VERSION constant and remove RF < 5.0 dead code ([02cf495](https://github.com/robotcodedev/robotcode/commit/02cf495faa1683a3ff6f62552cf1fb5d7f86454d))
389
+
390
+
391
+ - Add module-level RF_VERSION constant to robotcode.robot.utils,
392
+ resolved once at import time instead of repeated lru_cache lookups
393
+ - Remove dead code paths for Robot Framework < 5.0 (no longer supported),
394
+ including the internal tidy-based formatter and obsolete version branches
395
+ - Replace all ~134 get_robot_version() call sites across 27 files with
396
+ the RF_VERSION constant
397
+
398
+
399
+ ### Testing
400
+
401
+ - **namespace:** Ensure mtime differs on coarse resolution filesystems ([c2b6a79](https://github.com/robotcodedev/robotcode/commit/c2b6a7958dacb3efbb7d102ef0839dca7c05f92f))
402
+ - Add unit tests for SqliteDataCache backend functionality ([f315426](https://github.com/robotcodedev/robotcode/commit/f315426b5179c083eee8475734612bb5dddf4433))
403
+ - Improve resource file modification simulation for validation ([a3107fd](https://github.com/robotcodedev/robotcode/commit/a3107fda390dd4407526d3d32dfd15e76577cf51))
404
+ - Improve mtime simulation for file modification in namespace validation ([9a58278](https://github.com/robotcodedev/robotcode/commit/9a58278903b5bacdc1713fb454aa46fc71cbe8d9))
405
+
406
+
5
407
  ## [2.4.0](https://github.com/robotcodedev/robotcode/compare/v2.3.1..v2.4.0) - 2026-03-17
6
408
 
7
409
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: robotcode
3
- Version: 2.4.0
3
+ Version: 2.5.1
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
@@ -48,23 +48,23 @@ Requires-Dist: robotcode-repl-server; extra == 'all'
48
48
  Requires-Dist: robotcode-runner; extra == 'all'
49
49
  Requires-Dist: robotframework-robocop>=6.0.0; extra == 'all'
50
50
  Provides-Extra: analyze
51
- Requires-Dist: robotcode-analyze==2.4.0; extra == 'analyze'
51
+ Requires-Dist: robotcode-analyze==2.5.1; extra == 'analyze'
52
52
  Provides-Extra: colored
53
53
  Requires-Dist: rich; extra == 'colored'
54
54
  Provides-Extra: debugger
55
- Requires-Dist: robotcode-debugger==2.4.0; extra == 'debugger'
55
+ Requires-Dist: robotcode-debugger==2.5.1; extra == 'debugger'
56
56
  Provides-Extra: languageserver
57
- Requires-Dist: robotcode-language-server==2.4.0; extra == 'languageserver'
57
+ Requires-Dist: robotcode-language-server==2.5.1; extra == 'languageserver'
58
58
  Provides-Extra: lint
59
59
  Requires-Dist: robotframework-robocop>=2.0.0; extra == 'lint'
60
60
  Provides-Extra: repl
61
- Requires-Dist: robotcode-repl==2.4.0; extra == 'repl'
61
+ Requires-Dist: robotcode-repl==2.5.1; extra == 'repl'
62
62
  Provides-Extra: replserver
63
- Requires-Dist: robotcode-repl-server==2.4.0; extra == 'replserver'
63
+ Requires-Dist: robotcode-repl-server==2.5.1; extra == 'replserver'
64
64
  Provides-Extra: rest
65
65
  Requires-Dist: docutils; extra == 'rest'
66
66
  Provides-Extra: runner
67
- Requires-Dist: robotcode-runner==2.4.0; extra == 'runner'
67
+ Requires-Dist: robotcode-runner==2.5.1; extra == 'runner'
68
68
  Provides-Extra: yaml
69
69
  Requires-Dist: pyyaml>=5.4; extra == 'yaml'
70
70
  Description-Content-Type: text/markdown
@@ -20,6 +20,7 @@ dependencies = [
20
20
  "pytest_asyncio>=0.23",
21
21
  "pytest-rerunfailures",
22
22
  "pytest-cov",
23
+ "pytest-mock",
23
24
  "mypy",
24
25
  "ruff",
25
26
  "debugpy",
@@ -41,6 +42,7 @@ test-reset = "pytest --regtest2-reset {args}"
41
42
  create-json-schema = "python ./scripts/create_robot_toml_json_schema.py"
42
43
  generate-rf-options = "python ./scripts/generate_rf_options.py"
43
44
  generate-tmlanguage = "python ./scripts/generate_tmlanguage.py"
45
+ create-cmd-line-docs = "python ./scripts/create_cmdline_doc.py"
44
46
 
45
47
  [envs.rfbeta]
46
48
  python = "3.13"
@@ -92,7 +94,7 @@ matrix.rf.dependencies = [
92
94
  ]
93
95
 
94
96
  [envs.hatch-test]
95
- dependencies = ["pytest", "pytest-html", "pytest_asyncio>=0.23", "pyyaml"]
97
+ dependencies = ["pytest", "pytest-html", "pytest-mock", "pytest_asyncio>=0.23", "pyyaml"]
96
98
  pre-install-commands = ["python ./scripts/install_packages.py"]
97
99
 
98
100
  [[envs.test.matrix]]
@@ -52,15 +52,15 @@ dependencies = ["robotcode-core", "robotcode-plugin", "robotcode-robot"]
52
52
  dynamic = ["version"]
53
53
 
54
54
  [project.optional-dependencies]
55
- debugger = ["robotcode-debugger==2.4.0"]
56
- languageserver = ["robotcode-language-server==2.4.0"]
57
- runner = ["robotcode-runner==2.4.0"]
58
- analyze = ["robotcode-analyze==2.4.0"]
55
+ debugger = ["robotcode-debugger==2.5.1"]
56
+ languageserver = ["robotcode-language-server==2.5.1"]
57
+ runner = ["robotcode-runner==2.5.1"]
58
+ analyze = ["robotcode-analyze==2.5.1"]
59
59
  yaml = ["PyYAML>=5.4"]
60
60
  lint = ["robotframework-robocop>=2.0.0"]
61
61
  rest = ["docutils"]
62
- repl = ["robotcode-repl==2.4.0"]
63
- replserver = ["robotcode-repl-server==2.4.0"]
62
+ repl = ["robotcode-repl==2.5.1"]
63
+ replserver = ["robotcode-repl-server==2.5.1"]
64
64
  colored = ["rich"]
65
65
  all = [
66
66
  "robotcode-debugger",
@@ -145,7 +145,10 @@ build_command = "pip install hatch && hatch build"
145
145
  [tool.pytest.ini_options]
146
146
  minversion = "6.0"
147
147
  addopts = "-ra -vv -rf --ignore=bundled --ignore=.hatch"
148
- filterwarnings = "ignore:.*Using or importing the ABCs from 'collections' instead of from 'collections.abc'.*:DeprecationWarning"
148
+ filterwarnings = [
149
+ "ignore:.*Using or importing the ABCs from 'collections' instead of from 'collections.abc'.*:DeprecationWarning",
150
+ "ignore:cannot collect test class 'TestCaseDefinition'.*:pytest.PytestCollectionWarning",
151
+ ]
149
152
  testpaths = ["tests"]
150
153
  junit_suite_name = "robotcode"
151
154
  # console_output_style = "classic"
@@ -0,0 +1 @@
1
+ __version__ = "2.5.1"
@@ -1 +0,0 @@
1
- __version__ = "2.4.0"
File without changes
File without changes