GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( edc1a5...89ec84 )
by thatsIch
01:08
created

str_equal_case_ignore()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 2
rs 10
1
"""This module handles the skin section auto completion.
2
3
This provides the means to automatically add the base rainmeter sections
4
upon auto complete request with:
5
6
* [Rainmeter]
7
* [Metadata]
8
* [Variables]
9
* [Measure]
10
* [Meter]
11
* [MeterStyle]
12
13
This only activates if the file is empty or at least 2 new lines above the current caret.
14
"""
15
16
import yaml
17
18
import sublime
19
20
from .. import logger
0 ignored issues
show
Bug introduced by
The name logger does not seem to exist in module completion.
Loading history...
21
from .levenshtein import levenshtein
22
from .compiler import compile_keys
23
from .yaml_content_reader import YamlContentReader
24
25
26
def str_equal_case_ignore(str1, str2):
0 ignored issues
show
Coding Style introduced by
This function should have a docstring.

The coding style of this project requires that you add a docstring to this code element. Below, you find an example for methods:

class SomeClass:
    def some_method(self):
        """Do x and return foo."""

If you would like to know more about docstrings, we recommend to read PEP-257: Docstring Conventions.

Loading history...
27
    return str1.casefold() == str2.casefold()
28
29
class SkinSectionAutoCompleter(YamlContentReader):  # pylint: disable=R0903; only provide one method
30
    """Ths class is the logical state holder for the auto completion suggestions.
31
32
    Upon the request the respective yaml file is parsed and converted into a logical
33
    representation of the completions. Depending on the prior information the completions
34
    can be filtered containing less entries.
35
    """
36
37
    def __get_completions(self):
38
        """IO access to the yaml file.
39
40
        Uses a yaml loader to parse it into a python object.
41
        """
42
        try:
43
            section_content = self._get_yaml_content("completion/", "section.yaml")
44
            section = yaml.load(section_content)
45
46
            return section
47
48
        except yaml.YAMLError as error:
49
            logger.error(error)
50
            return []
51
52
    def __lazy_initialize_completions(self):
0 ignored issues
show
Coding Style introduced by
This method should have a docstring.

The coding style of this project requires that you add a docstring to this code element. Below, you find an example for methods:

class SomeClass:
    def some_method(self):
        """Do x and return foo."""

If you would like to know more about docstrings, we recommend to read PEP-257: Docstring Conventions.

Loading history...
53
        # use lazy initialization because else the API is not available yet
54
        if not self.all_completions:
55
            self.all_completions = self.__get_completions()
56
            self.all_key_completions = compile_keys(self.all_completions)
57
58
    def __sections_contain_section_id(self, sections, section_id):
0 ignored issues
show
Coding Style introduced by
This method should have a docstring.

The coding style of this project requires that you add a docstring to this code element. Below, you find an example for methods:

class SomeClass:
    def some_method(self):
        """Do x and return foo."""

If you would like to know more about docstrings, we recommend to read PEP-257: Docstring Conventions.

Loading history...
Coding Style introduced by
This method could be written as a function/class method.

If a method does not access any attributes of the class, it could also be implemented as a function or static method. This can help improve readability. For example

class Foo:
    def some_method(self, x, y):
        return x + y;

could be written as

class Foo:
    @classmethod
    def some_method(cls, x, y):
        return x + y;
Loading history...
59
        # value not used here
60
        for section in sections:
61
            if str_equal_case_ignore(section, section_id):
62
                return True
63
64
        return False
65
66
    def __filter_completions_by_sec(self, sections):
0 ignored issues
show
Coding Style introduced by
This method should have a docstring.

The coding style of this project requires that you add a docstring to this code element. Below, you find an example for methods:

class SomeClass:
    def some_method(self):
        """Do x and return foo."""

If you would like to know more about docstrings, we recommend to read PEP-257: Docstring Conventions.

Loading history...
67
        # filter by already existing keys
68
        completions = []
69
70
        settings = sublime.load_settings("Rainmeter.sublime-settings")
71
        allow_duplicates = settings.get("allow_completion_section_duplicates", False)
72
73
        for completion in self.all_key_completions:
74
            # trigger is not used here
75
            section_id, display, content, unique = completion
76
77
            # we only need to search for duplicates
78
            # if we are having a unique section like [Rainmeter]
79
            # and not allow duplicates
80
            if unique and not allow_duplicates:
81
                contained = self.__sections_contain_section_id(sections, section_id)
82
83
                if not contained:
84
                    completions.append((display, content))
85
            else:
86
                completions.append((display, content))
87
88
        return completions
89
90
    # only show our completion list because nothing else makes sense in this context
91
    flags = sublime.INHIBIT_EXPLICIT_COMPLETIONS | sublime.INHIBIT_WORD_COMPLETIONS
92
93
    all_completions = None
94
    all_key_completions = None
95
96
    def get_key_context_completion(self, prefix, line_content, sections):
97
        """Provide all possible sections without duplicates of unique ones."""
98
        # if section.casefold() != "Metadata".casefold():
99
        #     return None
100
101
        self.__lazy_initialize_completions()
102
        completions = self.__filter_completions_by_sec(sections)
103
        # no results, means all keys are used up
104
        if not completions:
105
            return None
106
107
        # only show sorted by distance if something was already typed
108
        # because distance to empty string makes no sense
109
        if line_content != "":
110
            # sort by levenshtein distance
111
            sorted_completions = sorted(
112
                completions,
113
                key=lambda completion: levenshtein(completion[1], prefix)
114
            )
115
            return sorted_completions, self.flags
116
        else:
117
            return completions, self.flags
118