Overview
Comment: | add pacakge disovery, and additional comment styles (different languages) |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f03780244f3b89cd5dbf1a0f5dcca340 |
User & Date: | mario on 2022-10-31 18:56:16 |
Other Links: | manifest | tags |
Context
2022-11-01
| ||
16:57 | add new comment extraction rx check-in: 3ad4b252ac user: mario tags: trunk | |
2022-10-31
| ||
18:56 | add pacakge disovery, and additional comment styles (different languages) check-in: f03780244f user: mario tags: trunk | |
12:56 | doc additions, add params for setup and gui, fix flit sample check-in: 93aac20151 user: mario tags: trunk | |
Changes
Modified pluginconf/__init__.py from [5e7e9e9afe] to [97ed648af8].
︙ | ︙ | |||
284 285 286 287 288 289 290 | And `meta.config` already parsed as a list (`OptionList`) of dictionaries. """ # Try via pkgutil first, # find any plugins.* modules, or main packages if module: search = plugin_base + kwargs.get("extra_base", []) | | | 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 | And `meta.config` already parsed as a list (`OptionList`) of dictionaries. """ # Try via pkgutil first, # find any plugins.* modules, or main packages if module: search = plugin_base + kwargs.get("extra_base", []) for base, sfx in itertools.product(search, [".py", "/__init__.py"]): try: #log.debug(f"mod={base} fn={filename}.py") src = get_data(filename=module+sfx, decode=True, file_root=base) if src: break except (IOError, OSError, FileNotFoundError): continue # plugin_meta_extract() will print a notice later |
︙ | ︙ | |||
359 360 361 362 363 364 365 366 367 368 369 370 371 372 | "config": [], "doc": "" } # Extract coherent comment block src = src.replace("\r", "") if not literal: src = rx.comment.search(src) if not src: log.warning("Couldn't read source meta information: %s", filename) return meta src = src.group(0) src = rx.hash.sub("", src).strip() | > | 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | "config": [], "doc": "" } # Extract coherent comment block src = src.replace("\r", "") if not literal: src = rx.header.sub("", src) src = rx.comment.search(src) if not src: log.warning("Couldn't read source meta information: %s", filename) return meta src = src.group(0) src = rx.hash.sub("", src).strip() |
︙ | ︙ | |||
466 467 468 469 470 471 472 | class rx: """ Pretty crude comment splitting approach. But works well enough already. Technically a YAML parser would do better; but is likely overkill. """ | > > > > > > | > > > > > | > > | 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 | class rx: """ Pretty crude comment splitting approach. But works well enough already. Technically a YAML parser would do better; but is likely overkill. """ header = re.compile(r""" (\A ( \#! \s+ /.+ | # shebang <\?php .* ) $)+ """, re.M | re.X) comment = re.compile(r""" (^ [ ]{0,4} \# .*\n)+ | # general (^ [ ]{0,4} // .*\n)+ | # C++-style /\* [\s\S]+? \*/ | # C-multiline <\# [\s\S]+? \#> | \{\# [\s\S]+? \#\} # PS/Perl """, re.M | re.X) hash = re.compile(r""" (^ [ ]{0,4} [#*/]{1,2} [ ]{0,3}) """, re.M | re.X) keyval = re.compile(r""" ^([\w-]+):(.*$(?:\n(?![\w-]+:).+$)*) # plain key:value lines """, re.M | re.X) config = re.compile(r""" \{ ((?: [^\{\}]+ | \{[^\}]*\} )+) \} # JSOL/YAML scheme {...} dicts | \< (.+?) \> # old <input> HTML style """, re.X) |
︙ | ︙ |
Added test/config_altsyntax.py version [28af7a5552].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | # type: test # title: alternative syntaxes # description: other comment types # version: 0.7.8 # # Kinda have to do snippets here. import pytest import re import textwrap import pluginconf def _parse(text): text = re.sub(r"\A\n", "", text) text = textwrap.dedent(text) return pluginconf.plugin_meta(src=text) def multiline_c(): c_style= """ /** * api: c * title: example * version: 3.5.1 * category: multiline * * Do we get a comment? */ """ assert _parse(c_style).version == "3.5.1" assert _parse(c_style).doc == "Do we get a comment?" def multiline_ps1(): ps1_style= """ <# # api: cpp # title: second version: 2.1 # category: nonpython # # Won't work without hashes #> """ print(_parse(ps1_style)) assert _parse(ps1_style).version == "2.1" # requires adapting the continuation line detection (including spaced points) # and detecting multiline markers, and stripping them (end up in doc else) def indent_cpp(): cpp_style= """ // api: cpp // title: third // version: 3.3 // category: doubleprefix // // Basically just // instead of # """ assert _parse(cpp_style).version == "3.3" |