Skip to content

Commit 0f8ebad

Browse files
committed
DOP-1073: no longer render RefRole prefix if no title is found
1 parent d602861 commit 0f8ebad

25 files changed

+370
-321
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
- Populate literal include nodes (DOP-876).
1313

14+
### Fixed
15+
16+
- RefRole nodes no longer render with the prefix if no title is found (DOP-1073).
17+
1418
## [v0.4.9] - 2020-06-05
1519

1620
### Added

snooty/cache.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from collections import defaultdict
2+
from dataclasses import dataclass, field
3+
from typing import Set, Tuple, Dict, DefaultDict, Optional, Iterator, TypeVar, Generic
4+
5+
_T = TypeVar("_T")
6+
7+
8+
@dataclass
9+
class Cache(Generic[_T]):
10+
"""A versioned cache that associates a (_T, int) pair with an arbitrary object and
11+
an integer version. Whenever the key is re-assigned, the version is incremented."""
12+
13+
_cache: Dict[Tuple[_T, int], object] = field(default_factory=dict)
14+
_keys_of_each_fileid: DefaultDict[_T, Set[int]] = field(
15+
default_factory=lambda: defaultdict(set)
16+
)
17+
_versions: DefaultDict[Tuple[_T, int], int] = field(
18+
default_factory=lambda: defaultdict(int)
19+
)
20+
21+
def __setitem__(self, key: Tuple[_T, int], value: object) -> None:
22+
if key in self._cache:
23+
self._cache[key] = value
24+
else:
25+
self._cache[key] = value
26+
27+
self._versions[key] += 1
28+
self._keys_of_each_fileid[key[0]].add(key[1])
29+
30+
def __delitem__(self, fileid: _T) -> None:
31+
keys = self._keys_of_each_fileid[fileid]
32+
del self._keys_of_each_fileid[fileid]
33+
for key in keys:
34+
del self._cache[(fileid, key)]
35+
36+
def __getitem__(self, key: Tuple[_T, int]) -> Optional[object]:
37+
return self._cache.get(key, None)
38+
39+
def get_versions(self, fileid: _T) -> Iterator[int]:
40+
for key, version in self._versions.items():
41+
if key[0] == fileid:
42+
yield version

snooty/eventparser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import Any, Callable, Dict, Set, Tuple, Iterable, Union
2-
from .types import FileId, Page
2+
from .types import FileId
3+
from .page import Page
34
from . import n
45

56

snooty/gizaparser/extracts.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
from ..flutter import checked
55
from .nodes import Inheritable, GizaCategory, HeadingMixin
66
from .parse import parse
7-
from ..types import EmbeddedRstParser, Page
7+
from ..types import EmbeddedRstParser
8+
from ..page import Page
89
from ..diagnostics import Diagnostic, MissingRef
910
from .. import n
1011

snooty/gizaparser/nodes.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@
2424
Set,
2525
)
2626
from ..flutter import checked
27-
from ..types import Page, EmbeddedRstParser, ProjectConfig
27+
from ..types import EmbeddedRstParser, ProjectConfig
2828
from ..diagnostics import (
2929
Diagnostic,
3030
UnknownSubstitution,
3131
FailedToInheritRef,
3232
CannotOpenFile,
3333
RefAlreadyExists,
3434
)
35+
from ..page import Page
3536
from .. import n
3637

3738
_T = TypeVar("_T", str, object)

snooty/gizaparser/release.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from pathlib import Path
33
from typing import Callable, Optional, List, Tuple, Sequence
44
from ..flutter import checked
5-
from ..types import EmbeddedRstParser, Page
5+
from ..types import EmbeddedRstParser
6+
from ..page import Page
67
from ..diagnostics import Diagnostic, MissingRef
78
from .. import n
89
from .parse import parse

snooty/gizaparser/steps.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
from .. import n
66
from .parse import parse
77
from .nodes import Inheritable, GizaCategory, HeadingMixin
8-
from ..types import EmbeddedRstParser, Page
8+
from ..types import EmbeddedRstParser
9+
from ..page import Page
910
from ..diagnostics import Diagnostic
1011

1112

snooty/gizaparser/test_extracts.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from pathlib import Path, PurePath
22
from typing import Dict, Tuple, List, Optional
33
from .extracts import GizaExtractsCategory
4-
from ..types import Page, ProjectConfig
4+
from ..types import ProjectConfig
5+
from ..page import Page
56
from ..diagnostics import Diagnostic
67
from ..parser import EmbeddedRstParser
78
from ..util_test import ast_to_testing_string

snooty/gizaparser/test_release.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from pathlib import Path, PurePath
22
from typing import Dict, Tuple, List, Optional
33
from .release import GizaReleaseSpecificationCategory
4-
from ..types import Page, ProjectConfig
4+
from ..types import ProjectConfig
5+
from ..page import Page
56
from ..diagnostics import Diagnostic
67
from ..parser import EmbeddedRstParser
78
from ..util_test import check_ast_testing_string

snooty/gizaparser/test_steps.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from pathlib import Path, PurePath
22
from typing import Dict, Tuple, List, Optional
33
from .steps import GizaStepsCategory
4-
from ..types import Page, ProjectConfig
4+
from ..types import ProjectConfig
5+
from ..page import Page
56
from ..diagnostics import Diagnostic
67
from ..parser import EmbeddedRstParser
78
from ..util_test import ast_to_testing_string, check_ast_testing_string

0 commit comments

Comments
 (0)