def _mark_internal(data, name): """Add a simple name mark to raw YAML/JSON data. This is used by `spack config blame` to show where config lines came from. """ if isinstance(data, dict): d = syaml.syaml_dict((_mark_internal(k, name), _mark_internal(v, name)) for k, v in data.items()) elif isinstance(data, list): d = syaml.syaml_list(_mark_internal(e, name) for e in data) else: d = syaml.syaml_type(data) if syaml.markable(d): d._start_mark = yaml.Mark(name, None, None, None, None, None) d._end_mark = yaml.Mark(name, None, None, None, None, None) return d
def test_marks(marks_filename, verbose=False): with open(marks_filename, 'r' if PY3 else 'rb') as fp0: inputs = fp0.read().split('---\n')[1:] for input in inputs: index = 0 line = 0 column = 0 while input[index] != '*': if input[index] == '\n': line += 1 column = 0 else: column += 1 index += 1 mark = yaml.Mark(marks_filename, index, line, column, text_type(input), index) snippet = mark.get_snippet(indent=2, max_length=79) if verbose: print(snippet) assert isinstance(snippet, str), type(snippet) assert snippet.count('\n') == 1, snippet.count('\n') data, pointer = snippet.split('\n') assert len(data) < 82, len(data) assert data[len(pointer) - 1] == '*', data[len(pointer) - 1]