blob: fb7cd40fa1ea0e6f4674bc5484ccb6121d630202 [file] [log] [blame]
# Copyright 2022 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
"""pw_ide configuration."""
import os
from pathlib import Path
from typing import Any, Dict, List, Optional, Union
from pw_console.yaml_config_loader_mixin import YamlConfigLoaderMixin
PW_IDE_DIR_NAME = '.pw_ide'
_PW_IDE_DEFAULT_DIR = Path(
os.path.expandvars('$PW_PROJECT_ROOT')) / PW_IDE_DIR_NAME
_DEFAULT_CONFIG = {
'targets': [],
'working_dir': _PW_IDE_DEFAULT_DIR,
}
_DEFAULT_PROJECT_FILE = Path('$PW_PROJECT_ROOT/.pw_ide.yaml')
_DEFAULT_PROJECT_USER_FILE = Path('$PW_PROJECT_ROOT/.pw_ide.user.yaml')
_DEFAULT_USER_FILE = Path('$HOME/.pw_ide.yaml')
class IdeSettings(YamlConfigLoaderMixin):
"""Pigweed IDE features settings storage class."""
def __init__(
self,
project_file: Union[Path, bool] = _DEFAULT_PROJECT_FILE,
project_user_file: Union[Path, bool] = _DEFAULT_PROJECT_USER_FILE,
user_file: Union[Path, bool] = _DEFAULT_USER_FILE,
default_config: Optional[Dict[str, Any]] = None,
) -> None:
self.config_init(
config_section_title='pw_ide',
project_file=project_file,
project_user_file=project_user_file,
user_file=user_file,
default_config=_DEFAULT_CONFIG
if default_config is None else default_config,
environment_var='PW_IDE_CONFIG_FILE',
)
@property
def working_dir(self) -> Path:
"""Path to the pw_ide working directory.
This should not be a directory that's regularly deleted or manipulated
by other processes (e.g. the GN `out` directory) nor should it be
committed to the code repo.
"""
return Path(self._config.get('working_dir', ''))
@property
def targets(self) -> List[str]:
"""The list of targets that should be made available for code analysis.
In this case, "target" is analogous to a GN target, i.e., a particular
build configuration. Targets defined here will be used when processing
a compilation database.
"""
return self._config.get('targets', list())