Skip to content

Commit 22526e5

Browse files
committed
feat(robotlangserver): new setting .analysis.cache.saveLocation where you can specify the location where robotcode saves cached data
1 parent 3fec507 commit 22526e5

File tree

4 files changed

+53
-24
lines changed

4 files changed

+53
-24
lines changed

package.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,20 @@
472472
"default": "default",
473473
"scope": "resource"
474474
},
475+
"robotcode.analysis.cache.saveLocation": {
476+
"type": "string",
477+
"enum": [
478+
"workspaceStorage",
479+
"workspaceFolder"
480+
],
481+
"enumDescriptions": [
482+
"Save cached data into workspace folder.",
483+
"Save cached data into workspace storage."
484+
],
485+
"description": "Specifies where cached data is saved.",
486+
"default": "workspaceStorage",
487+
"scope": "resource"
488+
},
475489
"robotcode.run.openOutputAfterRun": {
476490
"type": "string",
477491
"enum": [

robotcode/language_server/robotframework/configuration.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,15 @@ class RpaMode(Enum):
2020
NORPA = "norpa"
2121

2222

23+
class CacheSaveLocation(Enum):
24+
WORKSPACE_FOLDER = "workspaceFolder"
25+
WORKSPACE_STORAGE = "workspaceStorage"
26+
27+
2328
@config_section("robotcode.robot")
2429
@dataclass
2530
class RobotConfig(ConfigBase):
26-
args: Tuple[str, ...] = field(default_factory=tuple)
31+
args: List[str] = field(default_factory=list)
2732
python_path: List[str] = field(default_factory=list)
2833
env: Dict[str, str] = field(default_factory=dict)
2934
variables: Dict[str, Any] = field(default_factory=dict)
@@ -73,6 +78,12 @@ class WorkspaceConfig(ConfigBase):
7378
exclude_patterns: List[str] = field(default_factory=list)
7479

7580

81+
@config_section("robotcode.analysis.cache")
82+
@dataclass
83+
class Cache(ConfigBase):
84+
save_location: CacheSaveLocation = CacheSaveLocation.WORKSPACE_STORAGE
85+
86+
7687
@config_section("robotcode.analysis")
7788
@dataclass
7889
class AnalysisConfig(ConfigBase):
@@ -81,6 +92,7 @@ class AnalysisConfig(ConfigBase):
8192
max_project_file_count: int = 5000
8293
references_code_lens: bool = False
8394
find_unused_references: bool = False
95+
cache: Cache = field(default_factory=Cache)
8496

8597

8698
@config_section("robotcode.documentationServer")

robotcode/language_server/robotframework/diagnostics/imports_manager.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
from ...common.lsp_types import DocumentUri, FileChangeType, FileEvent
3939
from ...common.parts.workspace import FileWatcherEntry, Workspace
4040
from ...common.text_document import TextDocument
41-
from ..configuration import RobotConfig
41+
from ..configuration import CacheSaveLocation, RobotCodeConfig
4242
from ..utils.ast_utils import HasError, HasErrors, Token
4343
from ..utils.async_ast import walk
4444
from ..utils.robot_path import find_file_ex
@@ -486,17 +486,21 @@ def filepath_base(self) -> Path:
486486
class ImportsManager:
487487
_logger = LoggingDescriptor()
488488

489-
def __init__(self, parent_protocol: RobotLanguageServerProtocol, folder: Uri, config: RobotConfig) -> None:
489+
def __init__(self, parent_protocol: RobotLanguageServerProtocol, folder: Uri, config: RobotCodeConfig) -> None:
490490
super().__init__()
491491
self.parent_protocol = parent_protocol
492492

493493
self.folder = folder
494494
get_robot_version()
495495

496496
cache_base_path = self.folder.to_path()
497-
if isinstance(self.parent_protocol.initialization_options, dict):
498-
if "storageUri" in self.parent_protocol.initialization_options:
499-
cache_base_path = Uri(self.parent_protocol.initialization_options["storageUri"]).to_path()
497+
if (
498+
config.analysis.cache.save_location == CacheSaveLocation.WORKSPACE_STORAGE
499+
and isinstance(self.parent_protocol.initialization_options, dict)
500+
and "storageUri" in self.parent_protocol.initialization_options
501+
):
502+
cache_base_path = Uri(self.parent_protocol.initialization_options["storageUri"]).to_path()
503+
500504
self._logger.trace(lambda: f"use {cache_base_path} as base for caching")
501505

502506
self.lib_doc_cache_path = (
@@ -506,8 +510,7 @@ def __init__(self, parent_protocol: RobotLanguageServerProtocol, folder: Uri, co
506510
/ get_robot_version_str()
507511
/ "libdoc"
508512
)
509-
510-
self.config: RobotConfig = config
513+
self.config = config
511514
self._libaries_lock = Lock()
512515
self._libaries: OrderedDict[_LibrariesEntryKey, _LibrariesEntry] = OrderedDict()
513516
self._resources_lock = Lock()
@@ -521,7 +524,7 @@ def __init__(self, parent_protocol: RobotLanguageServerProtocol, folder: Uri, co
521524
self._command_line_variables_lock = Lock()
522525

523526
self._environment = dict(os.environ)
524-
self._environment.update(self.config.env)
527+
self._environment.update(self.config.robot.env)
525528

526529
self._library_files_cache = AsyncSimpleLRUCache()
527530
self._resource_files_cache = AsyncSimpleLRUCache()
@@ -540,14 +543,14 @@ async def get_command_line_variables(self) -> List[VariableDefinition]:
540543
if self._command_line_variables is None:
541544
command_line_vars: List[VariableDefinition] = []
542545

543-
if self.config is None:
546+
if self.config.robot is None:
544547
self._command_line_variables = []
545548
else:
546549
command_line_vars = [
547550
CommandLineVariableDefinition(0, 0, 0, 0, "", f"${{{k}}}", None, has_value=True, value=(v,))
548-
for k, v in self.config.variables.items()
551+
for k, v in self.config.robot.variables.items()
549552
]
550-
for variable_file in self.config.variable_files:
553+
for variable_file in self.config.robot.variable_files:
551554
name, args = split_args_from_name_or_path(variable_file)
552555
try:
553556
lib_doc = await self.get_libdoc_for_variables_import(
@@ -806,7 +809,7 @@ async def _find_library(self, name: str, base_dir: str, variables: Optional[Dict
806809
name,
807810
str(self.folder.to_path()),
808811
base_dir,
809-
self.config.variables if self.config is not None else None,
812+
self.config.robot.variables if self.config.robot is not None else None,
810813
variables,
811814
)
812815

@@ -836,7 +839,7 @@ async def __find_resource(
836839
name,
837840
str(self.folder.to_path()),
838841
base_dir,
839-
self.config.variables if self.config is not None else None,
842+
self.config.robot.variables if self.config.robot is not None else None,
840843
variables,
841844
file_type,
842845
)
@@ -855,7 +858,7 @@ async def __find_variables(self, name: str, base_dir: str, variables: Optional[D
855858
name,
856859
str(self.folder.to_path()),
857860
base_dir,
858-
self.config.variables if self.config is not None else None,
861+
self.config.robot.variables if self.config.robot is not None else None,
859862
variables,
860863
)
861864

@@ -918,7 +921,7 @@ async def _get_libdoc() -> LibraryDoc:
918921
args,
919922
str(self.folder.to_path()),
920923
base_dir,
921-
self.config.variables if self.config is not None else None,
924+
self.config.robot.variables if self.config.robot is not None else None,
922925
variables,
923926
),
924927
LOAD_LIBRARY_TIME_OUT,
@@ -1111,7 +1114,7 @@ async def _get_libdoc() -> VariablesDoc:
11111114
args,
11121115
str(self.folder.to_path()),
11131116
base_dir,
1114-
self.config.variables if self.config is not None else None,
1117+
self.config.robot.variables if self.config.robot is not None else None,
11151118
variables,
11161119
),
11171120
LOAD_LIBRARY_TIME_OUT,
@@ -1207,7 +1210,7 @@ async def complete_library_import(
12071210
name,
12081211
str(self.folder.to_path()),
12091212
base_dir,
1210-
self.config.variables if self.config is not None else None,
1213+
self.config.robot.variables if self.config.robot is not None else None,
12111214
variables,
12121215
)
12131216

@@ -1218,7 +1221,7 @@ async def complete_resource_import(
12181221
name,
12191222
str(self.folder.to_path()),
12201223
base_dir,
1221-
self.config.variables if self.config is not None else None,
1224+
self.config.robot.variables if self.config.robot is not None else None,
12221225
variables,
12231226
)
12241227

@@ -1230,7 +1233,7 @@ async def complete_variables_import(
12301233
name,
12311234
str(self.folder.to_path()),
12321235
base_dir,
1233-
self.config.variables if self.config is not None else None,
1236+
self.config.robot.variables if self.config.robot is not None else None,
12341237
variables,
12351238
)
12361239

@@ -1239,6 +1242,6 @@ def resolve_variable(self, name: str, base_dir: str = ".", variables: Optional[D
12391242
name,
12401243
str(self.folder.to_path()),
12411244
base_dir,
1242-
self.config.variables if self.config is not None else None,
1245+
self.config.robot.variables if self.config.robot is not None else None,
12431246
variables,
12441247
)

robotcode/language_server/robotframework/parts/documents_cache.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from ...common.decorators import language_id_filter
2424
from ...common.parts.workspace import WorkspaceFolder
2525
from ...common.text_document import TextDocument
26-
from ..configuration import RobotConfig
26+
from ..configuration import RobotCodeConfig, RobotConfig
2727
from ..diagnostics.imports_manager import ImportsManager
2828
from ..diagnostics.namespace import DocumentType, Namespace
2929
from ..utils.ast_utils import Token
@@ -429,7 +429,7 @@ async def default_imports_manager(self) -> ImportsManager:
429429
self._default_imports_manager = ImportsManager(
430430
self.parent,
431431
Uri(self.parent.workspace.root_uri or "."),
432-
RobotConfig(args=(), python_path=[], env={}, variables={}),
432+
RobotCodeConfig(),
433433
)
434434

435435
return self._default_imports_manager
@@ -444,7 +444,7 @@ async def get_imports_manager(self, document: TextDocument) -> ImportsManager:
444444

445445
async with self._imports_managers_lock:
446446
if folder not in self._imports_managers:
447-
config = await self.parent.workspace.get_configuration(RobotConfig, folder.uri)
447+
config = await self.parent.workspace.get_configuration(RobotCodeConfig, folder.uri)
448448

449449
self._imports_managers[folder] = ImportsManager(self.parent, folder.uri, config)
450450

0 commit comments

Comments
 (0)