mirror of
https://github.com/drewcassidy/yaclog.git
synced 2024-09-01 14:58:58 +00:00
Version entries now have line numbers again
This commit is contained in:
parent
2be155c1c0
commit
17a17fea41
@ -14,6 +14,8 @@
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import datetime
|
||||
import os
|
||||
import re
|
||||
@ -35,7 +37,7 @@ class VersionEntry:
|
||||
|
||||
def __init__(self, name: str = 'Unreleased',
|
||||
date: Optional[datetime.date] = None, tags: Optional[List[str]] = None,
|
||||
link: Optional[str] = None, link_id: Optional[str] = None):
|
||||
link: Optional[str] = None, link_id: Optional[str] = None, line_no: Optional[int] = None):
|
||||
"""
|
||||
Create a new version entry
|
||||
|
||||
@ -44,6 +46,7 @@ class VersionEntry:
|
||||
:param tags: The version's tags
|
||||
:param link: The version's URL
|
||||
:param link_id: The version's link ID
|
||||
:param line_no What line in the original file the version starts on
|
||||
"""
|
||||
|
||||
self.name: str = name
|
||||
@ -61,7 +64,7 @@ class VersionEntry:
|
||||
self.link_id: Optional[str] = link_id
|
||||
"""The version's link ID, uses the version name by default when writing"""
|
||||
|
||||
self.line_no: Optional[int] = None
|
||||
self.line_no: Optional[int] = line_no
|
||||
"""What line the version occurs at in the file, or None if the version was not read from a file.
|
||||
This is not guaranteed to be correct after the changelog has been modified,
|
||||
and it has no effect on the written file"""
|
||||
@ -71,8 +74,15 @@ class VersionEntry:
|
||||
Uncategorized changes have a section of an empty string."""
|
||||
|
||||
@classmethod
|
||||
def from_header(cls, header: str):
|
||||
version = cls()
|
||||
def from_header(cls, header: str, line_no: Optional[int] = None) -> VersionEntry:
|
||||
"""
|
||||
Create a new version entry from a markdown header
|
||||
|
||||
:param header: A markdown header to parse
|
||||
:param line_no: Line number the header is on
|
||||
:return: a new VersionEntry with the header's information
|
||||
"""
|
||||
version = cls(line_no=line_no)
|
||||
|
||||
match = cls.header_regex.match(header)
|
||||
assert match, f'failed to parse version header: "{header}"'
|
||||
@ -83,7 +93,7 @@ class VersionEntry:
|
||||
try:
|
||||
version.date = datetime.date.fromisoformat(match['date'])
|
||||
except ValueError:
|
||||
return cls(name=header.lstrip('#').strip())
|
||||
return cls(name=header.lstrip('#').strip(), line_no=line_no)
|
||||
|
||||
if match['tags']:
|
||||
version.tags = [m['tag'].upper() for m in cls.tag_regex.finditer(match['tags'])]
|
||||
@ -224,7 +234,7 @@ class Changelog:
|
||||
|
||||
if token.kind == 'h2':
|
||||
# start of a version
|
||||
self.versions.append(VersionEntry.from_header(text))
|
||||
self.versions.append(VersionEntry.from_header(text, line_no=token.line_no))
|
||||
section = ''
|
||||
|
||||
elif len(self.versions) == 0:
|
||||
|
Loading…
Reference in New Issue
Block a user