Robot Framework 6.1.0
is now supported.ignore_git_dir=True
is now used by default in therobotframework-tidy
integration.- Bundled
robotframework-tidy
upgraded to4.3.0
. - Bundled
robotframework-robocop
upgraded to3.1.1
.
- Variables in variable subscript are now properly found. #889
- If the user completes something as
$var
, complete to${variable}
instead of$${variable}
.
- Improve
IF
/WHILE
/Run Keyword If
snippet completions to make it a bit clearer that python expressions are expected. robot.libraries.blacklist
can be used to blacklist libraries which should never appear in code-completion.- Deprecated libraries:
robot.libraries.deprecated
can be used to mark libraries as deprecated.- Keywords from deprecated libraries will not appear in the auto-import code-completion (so, they'll only be available if the
Library
is added to theSettings
). - Libraries which start with
*DEPRECATED*
in its doc are also considered deprecated. - Keywords from libraries marked as deprecated will be shown as deprecated.
- Requesting completions right after
Libraries
without any additional name will show completions for all known (pre-loaded) libraries. - Completions for variables are shown without having to enter
$
nor${
.
- Properly report about undefined variable in
RETURN
. #865 - References to variables used in
Evaluate
arguments are now properly collected. - Don't show completion for the variable being currently defined in variable assign.
- Text ranges when dealing with emoji unicode characters are now correct. #862
- Code analysis fix: An arguments with a name with '=' must match a star arg with the full name if the name was already found (in RF keyword and not python method). #860
- Debugger: Fixed issue where the stack of the debugger could end up being unsynchronized.
- Don't prefix module name for keywords in the current module. #843
- Improvement in the sorting of completions (completions which start with the current prefix appear first). #812
- It's possible to make a launch with a target in the arguments by specifying
<target-in-args>
as the target.
- Properly collect references for keywords with variables in the name. #827
- Add placeholders when completing keywords with variables in the name. #824
- If there's some error in a debugger callback, don't break execution. #841
- Find references for variables embedded in keywords. #825
-
Code completion is now provided for the library name and resource name.
-
New Setting to configure keyword completions:
robot.completions.keywords.prefixImportName
: Define whether completions showing keywords should prefix completions with the import name when applied.robot.completions.keywords.prefixImportNameIgnore
: Allows defining import names which should not be prefixed for keyword completions. i.e.:["builtin"]
.
-
New Settings to configure completions from keywords not currently imported in the current module (a.k.a.: auto-imports):
robot.completions.keywordsNotImported.enable
: Defines whether to show completions for keywords not currently imported (adds the proper import when applied).robot.completions.keywordsNotImported.addImport
: Defines whether to actually add the import statement when applying completions showing keywords not currently imported.
- Fixed caching issue where adding a file would not invalidate an internal cache which could make resolved imports appear as unresolved.
- Minor fixes
- If a user is paused in a log message break he should still be able to evaluate keywords based on the previous stack context.
- Fixed internal issue in debugger where a
path
variable could be accessed when undefined.
- Vendored Robocop updated to 2.5.0.
- Vendored Robotidy updated to 3.2.0.
- Tests may be run/debug using action in gutter (patch by
@jsmzr
).
- Fix invalid range in go to definition if range becomes invalid during the go to definition action. #769
- Snippets take into account the value of
robot.completions.keywords.argumentsSeparator
. #723 - Completions properly presented for
Variables
under*** Settings ***
. #744
- [Intellij] When pressing space a completion is no longer applied automatically.
- [Intellij] The plugin will re-register file associations to
.resource
and.robot
. #605 - Code analysis setting to check if keyword is not used anywhere in the workspace.
- Opt-in through the
robot.lint.unusedKeyword:true
setting. #722
- Opt-in through the
- An LRU based on file size now prevents unlimited usage of RAM when caching files loaded from the filesystem. #720
- It's possible to customize the size of the target memory for this LRU through the
RFLS_FILES_TARGET_MEMORY_IN_BYTES
environment variable.
- It's possible to customize the size of the target memory for this LRU through the
- If a keyword call resolves to multiple keywords, the argument analysis is done for all the matches. #724.
- (Experimental) Support for localization in Robot Framework 5.1. #728.
- The language may be set just for a file (with
language: <lang>
on the top of the file). - The language may be specified globally through the setting:
robot.language
. - Support for completions with translated section names and settings.
- Support for syntax highlighting translated bdd prefixes.
- The language(s) set in the
robot.language
configuration are automatically added as parameter on new launches.
- The language may be set just for a file (with
- [Intellij] Fixed
NullPointerException
on hover. #731 - [Intellij]
$Prompt$
macro properly replaced when launching. #737 - Operations no longer timeout, rather, they just print to the log (as the timeouts weren't always ideal for slower machines). #733
- Fixed issue where references wouldn't be found properly.
- Variables imported from module folder (
module/__init__.py
) are properly recognized. #734
- Support for PyCharm 22.2
- When a keyword call would resolve to more than one keyword definition with the same name an error is reported. #432
- Note: it can be disabled with
"robot.lint.keywordResolvesToMultipleKeywords": false
. - If a resource/library/variable import is not found and its name has variables, the resolved name is shown.
- If the stop button is pressed in a launch, subprocesses are killed regardless of the value of
RFLS_KILL_ZOMBIE_PROCESSES
. - The default value (which may resolve to a variable) is considered when resolving environment variables. #715
- File system notifications properly track changes to
.yaml
files.#710 - File system notifications properly handle tracking conflicts when a folder is tracked more than once recursively and not recursively in the same subtree. #710
- Variables are properly resolved recursively. #715
- Doc highlight no longer raises error with unclosed variable.
- A library is no longer considered more than once when collecting keywords.
- [Intellij] Support for CommonMark and not just plain Markdown.
- [Intellij] Provide hover docs even if definition cannot be found.
- Zombie processes are no longer automatically killed after doing a Robot Framework launch. #358
- It's possible to enable the previous behavior by setting an environment variable such as:
RFLS_KILL_ZOMBIE_PROCESSES=1
.
- It's possible to enable the previous behavior by setting an environment variable such as:
- Fix issue where replacement offset in section completion was wrong. #700
- Properly consider extended part of variables in expressions (fixes issue which could make variable not be resolved). #702
- Resolve variable files imported as modules. #699
- Vendored Robocop upgraded to 2.2.0. #703
- Robocop is always run with the project root as the cwd. #703
- By default Failures/Errors inside a TRY..EXCEPT statement won't suspend execution while debugging. #698
- Variables are loaded from classes in Python files. #704
- Fixes to support Robot Framework 5.1:
- Deal with
robot.running.builder.testsettings.TestDefaults
renamed torobot.running.builder.settings.Defaults
. - Consider new
TASK_HEADER
in AST. - Consider that
KeywordCall
is given instead ofEmptyLine
in invalid assign in keyword.
- Deal with
- New setting
"robot.completions.keywords.argumentsSeparator"
allows customizing spacing betwen keyword and arguments when auto-completing Keyword with arguments. #683
- Consider as defined a reference to any variable set as a global variable anywhere on the workspace. #641
- Code analysis for template arguments.
- Arguments aren't added when applying completions for keywords in
[Template]
. - Fixed integration with
robotframework-tidy
which could make formatting the same code a second time misbehave. #687 - Properly consider that
For each input work item
fromrpaframework
receives a keyword as the first parameter. #684 - Added support for
Import Library
keyword. #675 - Properly support constructs with nested usage of
Run Keyword
insideRun Keyword
. #686 - Updated
robotframework-tidy
to2.2.0
. - Updated
Robocop
to2.0.2
.
- Fix issue where a reference could be reported more than once.
- [Intellij] Launch exit info added to console UI in the UI thread. #662
- Properly deal with arguments containing regexp matches.
- Environment variables set using
Set Environment Variable
are now recognized. - Fix issue where variable with a set literal wasn't properly recognized.
- If an argument is specified multiple times a better error message is shown.
- Fix false positive when argument names are specified with variable names in it.
- Consider that an argument default values may be based on a previous argument. #664
- Properly consider local/global context when dealing with variables.
- Properly recognize loop variables in RF 3. #661
- Properly recognize variable that evaluates to 0.
- Properly recognize variables from Python that start with
DICT__
orLIST__
. - Fix syntax highlight of inline python evaluation inside of variables in IF statements. #666
- Properly consider that the
Comment
keyword arguments should be handled as comments. #665
- [Intellij] Support Intellij 221. #652
- [Intellij] Consider that getting the preferences may throw a ProcessCanceledException.
- Fix position of variable loaded in SetVariable methods to the var name position and not delimiter start.
- If a variable is defined after its usage inside a keyword it's properly marked as undefined.
- Variables in short format in Set XXX Variable keywords are accepted.
- Variables are properly collected from inline if.
- Variables in Evaluate are properly collected.
- Variables from expressions in conditions are properly collected.
- Bugfix release handling
Wait Until Keyword Succeeds
properly. #650
- Fixed issue which could make autocomplete delete code (only in Intellij). #484
- Handle
Run Keywords
properly. #642 - Proper semantic highlighting for
ELSE/ELSE IF
inRun Keyword If
. - Proper semantic highlighting for
AND
inRun Keywords
. - Hover over arguments from
Run Keyword
targets works properly. - Properly mark tests passed/failed in test view with
Robot Framework 3.x
. #644 - Fix to
robotframework-tidy
to no longer convert*Tasks*
to*Test Cases*
. - Fix issue in semantic highlighting when a slash was encountered. #647
- Improvements dealing with Variables:
- Variables in document are considered in Libdoc arguments. #634
- Escaping rules are considered when setting variables using
Set Variable XXX
keywords. #638 - Variables set with
Set Local Variable
are recognized. #637 - Consider that loading an environment variable may have a default value. #633
- Variables in python files with annotated assignments are supported (i.e.:
value: int = 10
). #629 - Variables in templates are not reported as errors. #632
- Properly deal with variables with other variables inside. #631
- Load variables from python module with
get_variables
returning a literal dict. #639
- Improvements in debugger:
- The debugger no longer stops in
Run Keyword And Return Status
by default. #625 - Assign to variable in debug console repl (i.e.:
${lst}= Create list a b
). - Fixed case where breakpoints in
.py
files wouldn't be added.
- The debugger no longer stops in
- Upgraded vendored
robocop
to2.0.1
. - Upgraded vendored
robotframework-tidy
to2.1.0
.
- Additional fix in cache invalidation for dependencies. #617
- Improvements dealing with Variables:
- Undefined variables are now reported. #334
robot.variables
: may be used to specify variables used for launching as well as code-completion/code analysis.robot.lint.ignoreVariables
: may be used to set variables to be ignored in linting.robot.loadVariablesFromArgumentsFile
may be used to load variables from an arguments file for code-completion and code analysis.- Note: the arguments file still needs to be separately set during launching too.
- Variables are recognized in expressions as well as inner variables.
- Variables set with the following keywords are recognized: #577
- Set Task Variable
- Set Test Variable
- Set Suite Variable
- Set Global Variable
- Variable files with a
.yml
are properly recognized (previously only.yaml
was supported). - Semantic highlighting properly deals with advanced variable syntax (with variables inside variables or using a subscript).
- Variables in assign now have the same color as variables in other places. #613
- Variable imports which can't be resolved are reported.
- May be disabled with
robot.lint.undefinedVariableImports
.
- May be disabled with
- Undefined variables are now reported. #334
- Fix issue in cache invalidation for dependencies. #617
\\
is escaped to\
when passed in the library arguments. #608- Fix in heuristics to match arguments which could result in wrong argument analysis in keyword calls. #603
- Hover now provides custom hints for variables, imports and parameters.
- Semantic highlighting supports Gherkin style (
Given
,Then
, ...). #581 (patch by @weltings) - Semantic highlighting only highlights names up to a dot if a related import/resource is found to avoid conflict with Keywords with a dot in the name. #585 (patch by @weltings)
- Semantic highlighting available for variables in keyword calls. #586
- Semantic highlighting for
WHILE limit=
andEXCEPT type=
. - Report unresolved variables when resolving a resource/import. #600
- Performance improvements
- Don't index everything in AST when only items from the section (LibraryImport, ResourceImport, ...) are requested.
- Caching of dependencies.
Run Keyword If
is now properly handled across all features in the language server. #495None
is no longer reported as undefined keyword when used as keyword call. #597- Misleading message saying that RF is old when it's not installed is no longer shown.
- Argument analysis is now also done for
Run Keyword
variants. #572 - [Debugger] It's now possible to ignore failures inside some keywords so that the debugger doesn't break in these cases when
Robot Log FAIL
is enabled. #575- Customizable through the
RFLS_IGNORE_FAILURES_IN_KEYWORDS
andRFLS_IGNORE_FAILURES_IN_KEYWORDS_OVERRIDE
environment variables (see Config for details).
- Customizable through the
- Performance improvements
- Improved AST indexing.
- Notification that settings changed are only sent to the server api if they actually changed.
- Documentation is now lazily loaded during code-completion.
- References are found when find references is activated from the keyword definition. #576
- Semantic highlighting for Keywords with dotted access improved.
- The documentation conversion from
REST
andROBOT
tomarkdown
is now done internally.
- Critical fix: skip analysis of arguments for
Run Keyword
variants.
- Keyword calls and library inits are now validated according to the signature. #558
- Usage of deprecated keywords is marked with a strikethrough.
- When a libspec can't be generated the reason and possible fixes are properly shown to the user.
- Signature info is now shown for libraries.
- Added options related to enabling/disabling linting features individually (see:
robot.lint.*
settings). - Added
${EMPTY}
completion. #566 - Snippet completions are now done at the target
robot.python.executable
and notrobot.language-server.python
(to account for statements only available depending on robot version). - The active parameter is properly highlighted in the signature help.
- The signature help is shown whenever a space is typed.
- Fixed case where
try..finally
wasn't stepping properly with step next. - When debugging variable values are shown on hover. #550
- A better error message is provided in the case where
robot
is not available or shadowed. #563 - Semantic highlighting is provided for variables in documentation. #564
- The current argument is highlighted during hover.
- Critical fix: properly apply new colors during semantic highlighting in Intellij. #565
- Robot Framework 5 is now officially supported.
- New statements (TRY, WHILE) should now work for all existing features.
- Debugger: step next considers that control flow statements are a part of the current keyword.
- Debugger: Fixed issue initializing
pydevd
debugger when it's already present in the environment. #556 - Semantic highlighting properly colors keyword calls with a namespace in fixtures. #533
- Libraries without keywords (a.k.a
DataDriver
) are no longer considered undefined. #559 - Properly deal with suites with a
__
prefix when launching. #561 - Raised time to obtain libspec mutex and give a better message on failure. #555
- Minors
- [Intellij] Variables configured in robot.variables are properly passed to launched process. #548
- It's now possible to break when an error or failure is logged with the following environment variables:
RFLS_BREAK_ON_FAILURE=1
RFLS_BREAK_ON_ERROR=1
- When launching, better heuristics are used to create a proper test suite. #482
- A suite is created considering init.robot in parents based on the specified
target
. - By default the
target
will be used to compute the suite as well as the needed filtering.
- A suite is created considering init.robot in parents based on the specified
- MarkupContent is now properly used in the signature help.
- Go to definition now works properly with .yaml files.
- The signature part of a keyword is now bold in the documentation.
- Keyword namespace access now has a different color in semantic highlighting. #533
- Code analysis will now notify if Library or Resource cannot be resolved. #542
- If Run Keyword has a variable concatenated, it's no longer considered an error. #534
- Properly resolve variables in arguments in the libspec generation. #535
- Improvements related to scheduling the lint after changing the editor.
- Fixed an issue which could make file system change notifications be ignored.
- Environment variables are properly passed when launching on Intellij. #529
- On Robot Framework 5, the builtin tidy is no longer available, so, the new robotidy is used automatically.
- Minors
- PYTHONPATH entries passed as -P to libdoc are now normalized (fixes issues passing entries which could end with
/.
).
- Updated Robocop to 1.12.0 and vendored a TOML implementation.
- Marked Intellij plugin as being compatible with Intellij 213.*
- Minors
- Library arguments can now be used in the libspec generation. Patch by
Jozef Grajciar
. #343robot.libraries.libdoc.needsArgs
setting can be used to specify which libraries require arguments in the generation.Remote
andFakerLib
are set by default.
- Libspec files may be pre-generated. #163
robot.libraries.libdoc.preGenerate
may be used to specify which libraries to pre-generate.- Some heuristics cover a few libraries which are always pre-generated if installed.
- Fixes related to aliasing libraries. #397
- Documentation is shown for keywords still not imported. #516
- Module is shown for for keywords already imported. #507
- Fixed error on dictionary completions. #503
- The code.formatter setting is now properly recognized as a string. #490
- Fixed crash during startup (the timeout expected to startup was too short). #489
- Minors
- Consider
PYTHONPATH
when searching forResource
imports. #486 - Properly consider that
[Template]
has a Keyword target. #479 - Mark
robot.codeFormatter
as a string and not an array. #481
- The
robotframework-tidy
code formatter is integrated.- Note:
"robot.codeFormatter": "robotidy"
must be set in the settings to use it.
- Note:
- The
CURDIR
variable is properly resolved. #449 - Bundled
Robocop
updated1.11.2
.
- Variable in run keyword argument should not be considered error. #468
- Fixed crash during startup: Improving port collection from Remote FS Observer. #434
- Fixed issue launching when no environment is provided.
- Fixed issue specifying files to be tracked in the filesystem observer. #450
- Minor bugfixes
- [Intellij] Additional logging to diagnose startup issues.
- Recognize keywords when used as arguments of other keywords (for BuiltIn library). #291
- [Intellij] Dialog to select Python executable now accepting ~ and variables. #418
- [Intellij] Fix internal issue getting language server communication. #421
- Find definition properly works for dictionary variables. Fix by: Marduk Bolaños. #407
- Complete dictionary items when the variable name includes spaces. Fix by: Marduk Bolaños.
- [Intellij] Intellij 212 (2021.2) is now supported.
- [Intellij] Properly to go to definition of variables inside of arguments. #404
- ${workspaceFolder} is accepted when resolving variables.
- ${env:VAR_NAME} is accepted when resolving variables.
- Robocop updated to 1.8.1.
- When using the poll mode for tracking file changes, it's possible to ignore directories. #398
- dict(&)/list(@) variables can be referenced as regular ($) variables. #387
- Completion for dictionary items with subscript. Fix by: Marduk Bolaños. #301
- Completion for dictionary variable names. Fix by: Marduk Bolaños. #301
- [Intellij] Bugfixes related to timeouts.
- Support for variables import:
- Loads variables from
.py
and.yaml
files.
- Loads variables from
- Semantic highlighting: equals sign no longer causes incorrect coloring on
catenate
keyword anddocumentation
section. - A module shadowing
builtin.py
no longer causes the defaultBuiltin
module not to be found anymore. - Code analysis no longer throws error when dealing with a
Library
without a name declared. - Robocop updated to 1.7.1.
- [Intellij]
${workspace}
and${env.SOME_VAR}
properly replaced for the language server python executable specified in the settings.
- Variables may be used in settings. See the related FAQ for details.
- Semantic highlighting was improved to differentiate the parameter (name) from the argument (value).
- Variables are now shown in the structure view.
- When launching a
.robot
, if a__init__.robot
is present in the same directory, a--suite
is done by default. - Breakpoints are properly hit on
__init__.robot
files. - [Intellij] Fixed exception related to code-folding during initializing.
- Fixed issue which could lead to high-cpu due to filesystem polling.
- It's now possible to set an environment variable
ROBOTFRAMEWORK_LS_POLL_TIME=<poll time in seconds>
to change the filesystem target poll time. - When possible, it's recommended to set an environment variable
ROBOTFRAMEWORK_LS_WATCH_IMPL=watchdog
to use native watches on Linux and MacOS (already default on Windows). - A file-observer is started as a separate process and multiple clients communicate with it.
- It's now possible to set an environment variable
- [Intellij] Outline is shown in the structure view.
- [Intellij] Fixed issue where a cancelled exception was logged.
- It's possible to configure the casing of keywords from libraries used in code-completion.
- Debugger:
- Add line breakpoints in
.robot
or.py
files. - Evaluate keywords.
- Pause at breakpoints to inspect the stack and see variables.
- Step in.
- Step over.
- Step return.
- Continue.
- Add line breakpoints in
- [Intellij] Add code-folding support to Intellij client.
- [Intellij] Wrap the preferences labels at 100 columns. #307
- [Intellij] Handle case where hover info is unavailable. #306
- [Intellij] Consider cases where the position from the LSP is no longer valid. #297
- [Intellij] Protect against NPE on Semantic Highlighting.
- Robocop linter is now opt-in instead of opt-out. #312
- Add code-completion for
${CURDIR}
. #313 - Use listener instead of monkey-patching when debugging (RF 4 onwards). #310
- Silence exception from creating libspec for Dialogs module. #93
- Search
PYTHONPATH
when looking to resolve relative paths in Imports. #266
- [Intellij] Supporting Intellij 2020.3 to 2021.1.
- [Intellij] Cancel semantic tokens request if document changes.
- [Intellij] Check if range is valid before applying semantic token.
- [Intellij] Add hover support. #278
- [Intellij] updated lsp4j to 0.12.0
- Resolve environment variables when trying to resolve libraries/resources paths (i.e.:
%{env_var}
). #295 - Properly resolve variables for Library imports (not only Resource imports).
- By default, fsnotify (polling) is now used on Linux and Mac and watchdog (native) on Windows due to resource usage limits on Linux and Mac.
Using
watchdog
is still recommended when possible. See the FAQ for details. - Code analysis with empty teardown works properly. #289
- No longer recursing on local circular imports. #269
- System directory separator
${/}
is recognized. #153 - It's now possible to enable logging through a
ROBOTFRAMEWORK_LS_LOG_FILE
environment variable. - Robocop fixes integrated (trailing blank line, misaligned variable).
- [Intellij] Fixed issue initializing language server with arguments in Mac OS.
- Robocop updated to 1.6.1.
- Fixes in semantic syntax hightlighting with Robot Framework 3.x.
- Keywords from
Reserved.py
are no longer shown for auto-import.
- [Intellij] Improved initialization of language server to validate the python executable and ask for a new one if the one found is not valid.
- [Intellij] Fix PYTHONPATH so that the language server shipped in the Intellij plugin is the one used.
- [Intellij] When requesting a completion, cancel previous one requested.
- [Intellij] Language server executable can be project dependent.
- Robocop is now used to lint (enabled by default, can be disabled in settings).
- Snippets completion is now properly case-insensitive.
- If there's some problem computing semantic tokens, log it and still return a valid value. #274
- If a keyword name is defined in the context, don't try to create an auto-import for it.
- Reworded some settings to be clearer.
- Fixed issue initializing the language server if there was a space in the installation path.
- Improved coloring is now computed on a thread using the
semanticTokens/full
request. - Fixed issue applying
FOR
templates. - Multi-line completions are properly indented when applied.
FOR
templates no longer have a/
in them.- Added templates for
IF
statements.
- Handles .resource files. #251
- If some error happens starting up the language server, show more information.
- The settings may now also be set per project and not only globally. #254
- Fix issue getting prefix for filesystem completions. #256
- Support python packages as libraries (package/init.py). #228
- Fixed issue applying arguments completion.
- Code completion for arguments properly brought up if a part of it is still not typed.
- Prefix properly computed for completions. #248
- Completion with dollar sign properly applied. #249
- Gathering workspace symbols is much faster.
- Keyword completions should not be duplicated by the auto-import Keyword completions anymore.
- It's now possible to use polling instead of native filesystem notifications
- It may be useful in case watchdog is having glitches.
- To use it, set an environment variable:
ROBOTFRAMEWORK_LS_WATCH_IMPL=fsnotify
- Properly consuming stderr from the language server process (redirecting it to
${user.home}/.robotframework-ls/.intellij-rf-ls-XXX.log
). - Notifying when python cannot be found on the PATH.
- Improved language server startup.
- Added syntax highlighting for variables.
- Initial version with support for:
- Settings for the language server may be set at
File > Settings > Languages & Frameworks > Robot Framework Language Server
- Code completion
- Code analysis
- Go to definition
- Browse Keywords (symbols)
- Syntax highlighting (pretty basic right now)
- Settings for the language server may be set at