Skip to content

Latest commit

 

History

History
935 lines (628 loc) · 43.6 KB

CHANGELOG.md

File metadata and controls

935 lines (628 loc) · 43.6 KB

1.5.1 - 2024-11-18

Added

  • build wheels for musllinux by @MrMino in #1243

New Contributors

  • @MrMino made their first contribution in #1243

Full Changelog: https://github.com/Instagram/LibCST/compare/v1.5.0...v1.5.1

1.5.0 - 2024-10-10

Added

  • FullyQualifiedNameProvider: Optionally consider pyproject.toml files when determining a file's module name and package by @camillol in #1148
  • Add validation for If node by @kiri11 in #1177
  • include python 3.13 in build by @khameeteman in #1203

Fixed

  • fix various Match statement visitation errors by @zsol in #1161
  • Mention codemod -x flag in docs by @kiri11 in #1169
  • Clear warnings for each file in codemod cli by @kiri11 in #1184
  • Typo fix in codemods_tutorial.rst (trivial) by @wimglenn in #1208
  • fix certain matchers breaking under multiprocessing by initializing them late by @kiri11 in #1204

Updated

  • make libcst_native::tokenizer public by @zsol in #1182
  • Use license instead of license-file by @michel-slm in #1189
  • Drop codecov from CI and readme by @amyreese in #1192

New Contributors

  • @kiri11 made their first contribution in #1169
  • @grievejia made their first contribution in #1174
  • @michel-slm made their first contribution in #1189
  • @wimglenn made their first contribution in #1208
  • @khameeteman made their first contribution in #1203

Full Changelog: https://github.com/Instagram/LibCST/compare/v1.4.0...v1.5.0

1.4.0 - 2024-05-22

Fixed

  • Fix Literal parse error in RemoveImportsVisitor by @camillol in #1130
  • Don't reset context.scratch between files by @zsol in #1151
  • Various documentation fixes
    • Typo fix FullRepoManager by @kit1980 in #1138
    • ✏️ Fix tiny typo in docs/source/metadata.rst by @tiangolo in #1134
    • ✏️ Fix typo in docs/source/scope_tutorial.ipynb by @tiangolo in #1135
    • Update CONTRIBUTING.md by @zaicruvoir1rominet in #1142

Added

  • Add helper functions for common ways of filtering nodes by @zaicruvoir1rominet in #1137
  • Dump CST to .dot (graphviz) files by @zaicruvoir1rominet in #1147
  • Implement PEP-696 by @thereversiblewheel in #1141

New Contributors

  • @tiangolo made their first contribution in #1134
  • @camillol made their first contribution in #1130
  • @zaicruvoir1rominet made their first contribution in #1142
  • @thereversiblewheel made their first contribution in #1141

Full Changelog: https://github.com/Instagram/LibCST/compare/v1.3.1...v1.4.0

1.3.1 - 2024-04-03

Fixed

  • ImportError due to missing mypy_extensions dependency by @zsol in #1128

1.3.0 - 2024-04-03

Updated

  • Removed dependencies on typing_extensions and typing_inspect by @zsol in #1126

1.2.0 - 2024-02-19

Updated

  • Support running LibCST on Python 3.12 and drop support for running it on 3.8
    • remove 3.8 support by @zsol in #1073
    • Remove reference to distutils by @zsol in #1099
    • Update pyproject.toml for Python 3.12 support by @itamaro in #1038

Added

  • Allow Element::codegen to be used by external users by @Wilfred in #1071

Fixed

  • Fix parsing list matchers without explicit brackets by @zsol in #1097
  • installing rustc/cargo for mybinder demo by @aleivag in #1083
  • fix filepathprovider generic type by @kinto0 in #1036

New Contributors

  • @itamaro made their first contribution in #1039
  • @kinto0 made their first contribution in #1036
  • @dtolnay made their first contribution in #1063
  • @anonymousdouble made their first contribution in #1082
  • @aleivag made their first contribution in #1083
  • @Wilfred made their first contribution in #1071
  • @diliop made their first contribution in #1106

Full Changelog: https://github.com/Instagram/LibCST/compare/v1.1.0...v1.2.0

1.1.0 - 2023-10-05

Added

  • PEP 695 support
    • parser: PEP 695 - Type Parameter Syntax #1004
    • Scope provider: support for type annotations #1014
  • PEP 701 support
    • parser: support arbitrarily nested f-strings #1026
    • parser: Parse multiline expressions in f-strings #1027
  • parser: Support files with mixed newlines #1007
  • libcst is now published to crates.io

Fixed

  • codemod/ApplyTypeAnnotationsVisitor: Do not annotate the same variable multiple times #956
  • parser: Don't swallow trailing whitespace #976
  • codemod/rename: Avoid duplicating import statements when the module name doesn't change #981

Updated

  • cli: Don't gather dirs ending .py #994
  • drop support for Python 3.7 #997
  • A few parser performance improvements:
    • Switch to using thread_local regular expressions to stop mutext contention #996
    • Remove need for regex in TextPosition::matches #1002
    • Remove Regexes from whitespace parser #1008

1.0.1 - 2023-06-07

Fixed

  • Fix type of evaluated_value on string to allow bytes by @ljodal in #721
  • Fix Sentinal typo by @kit1980 in #948
  • Allow no whitespace after lambda body in certain cases by @zsol in #939
  • Fix whitespace, fstring, walrus related parse errors (#939, #938, #937, #936, #935, #934, #933, #932, #931) by @zsol in #940
  • Codemod CLI: Print diff only when there is a change by @kit1980 in #945

New Contributors

  • @ljodal made their first contribution in #721
  • @kit1980 made their first contribution in #948

Full Changelog: https://github.com/Instagram/LibCST/compare/v1.0.0...v1.0.1

1.0.0 - 2023-05-25

The first major release of LibCST is essentially the same as 0.4.10, but using the newer, Rust-based parser implementation by default. The old, pure Python parser is scheduled for removal in the next (non-patch) release. Until then, it is available with the LIBCST_PARSER_TYPE environment variable set to pure.

Updated

  • Switch the default parser implementation to native by @zsol in #929

0.4.10 - 2023-05-23

New Contributors

  • @and-semakin made their first contribution in #816
  • @carljm made their first contribution in #828
  • @sagarbadiyani made their first contribution in #841
  • @podtserkovskiy made their first contribution in #894
  • @rchen152 made their first contribution in #903
  • @Kludex made their first contribution in #913
  • @jakkdl made their first contribution in #921

Added

  • Add py3.11 classifier by @and-semakin in #816
  • Script to regenerate test fixtures, upgrade to Pyre 0.9.10 by @amyreese in #872
  • Allow FullyQualifiedNameProvider to work with absolute paths by @amyreese in #867
  • Allow running codemods without configuring in YAML by @akx in #879
  • Support PEP 604 in ApplyTypeAnnotationsVisitor by @hauntsaninja in #868

Fixed

  • fix PEP 604 union annotations in decorators by @carljm in #828
  • [AddImportsVisitor] Docstring Check Only for the Top Element of the Body by @sagarbadiyani in #841
  • Fix #855 - fail to parse with statement by @stroxler in #861
  • Add setuptools-rust to build requirements in setup.py by @amyreese in #873
  • Relative imports from '' package are not allowed by @podtserkovskiy in #894
  • Use subprocess.DEVNULL instead of opening os.devnull by hand by @akx in #897
  • Ensure current Python interpreter is used for subprocesses by @akx in #898
  • Fix ApplyTypeAnnotationsVisitor behavior on attribute assignments. by @rchen152 in #903
  • Fix spelling and grammar in some comments by @stroxler in #908
  • skip escaped backslash in rf-string by @jakkdl in #921
  • relax validation rules on decorators by @jakkdl in #926

Full Changelog: https://github.com/Instagram/LibCST/compare/v0.4.9...v0.4.10

0.4.9 - 2022-11-10

Updated

  • Bump setuptools-rust version by @zsol in #809

Full Changelog: https://github.com/Instagram/LibCST/compare/v0.4.8...v0.4.9

0.4.8 - 2022-11-10

New Contributors

  • @dhruvmanila made their first contribution in #728
  • @vfazio made their first contribution in #801
  • @matthewshaer made their first contribution in #807

Fixed

  • Fix parse error message for number parsing by @zzl0 in #724
  • Fix problematic doc build, due to the new builder image provided by readthedocs doesn't has the graphviz-dev package pre-installed any more by @MapleCCC in #751
  • Fix docstring of FullRepoManager by @MapleCCC in #750
  • Fix bug when TypeOf is one of options in OneOf / AllOf by @MapleCCC in #756
  • Tighten the metadata type of ExpressionContextProvider by @MapleCCC in #760
  • Fix the bug that the use of formatter in codemods has undetermined target Python version, resulting in hard-to-reason-with behavior by @MapleCCC in #771

Added

  • Python 3.11 rutime support
    • test using python 3.11 beta versions by @zsol in #723
    • Python 3.11 wheels by @vfazio in #801
  • Raise informative exception when metadata is unresolved in a metadata-based match by @MapleCCC in #757
  • Add AccessorProvider by @matthewshaer in #807

Full Changelog: https://github.com/Instagram/LibCST/compare/v0.4.7...v0.4.8

0.4.7 - 2022-07-12

New Contributors

  • @Chenguang-Zhu made their first contribution in #720

Fixed

  • Fix get_qualified_names_for matching on prefixes of the given name by @lpetre in #719

Added

  • Implement lazy loading mechanism for expensive metadata providers by @Chenguang-Zhu in #720

0.4.6 - 2022-07-04

New Contributors

  • @superbobry made their first contribution in #702

Fixed

  • convert_type_comments now preserves comments following type comments by @superbobry in #702
  • QualifiedNameProvider optimizations
    • Cache the scope name prefix to prevent scope traversal in a tight loop by @lpetre in #708
    • Faster qualified name formatting by @lpetre in #710
    • Prevent unnecessary work in Scope.get_qualified_names_for_ by @lpetre in #709
  • Fix parsing of parenthesized empty tuples by @zsol in #712
  • Support whitespace after ParamSlash by @zsol in #713
  • [parser] bail on deeply nested expressions by @zsol in #718

0.4.5 - 2022-06-17

New Contributors

  • @zzl0 made their first contribution in #704

Fixed

  • Only skip supported escaped characters in f-strings by @zsol in #700
  • Escaping quote characters in raw string literals causes a tokenizer error by @zsol in #668
  • Corrected a code example in the documentation by @zzl0 in #703
  • Handle multiline strings that start with quotes by @zzl0 in #704
  • Fixed a performance regression in libcst.metadata.ScopeProvider by @lpetre in #698

0.4.4 - 2022-06-13

New Contributors

  • @adamchainz made their first contribution in #688

Added

  • Add package links to PyPI by @adamchainz in #688
  • native: add overall benchmark by @zsol in #692
  • Add support for PEP-646 by @zsol in #696

Updated

  • parser: use references instead of smart pointers for Tokens by @zsol in #691

0.4.3 - 2022-05-11

Fixed

  • Restore the 0.4.1 behavior for libcst.helpers.get_absolute_module by @lpetre in #684

0.4.2 - 2022-05-04

New Contributors

  • @stanislavlevin made their first contribution in #650
  • @dmitryvinn made their first contribution in #655
  • @wiyr made their first contribution in #669
  • @toofar made their first contribution in #675

Fixed

  • native: Avoid crashing by making IntoPy conversion fallible by @zsol in #639
  • native: make sure ParserError's line is zero-indexed by @zsol in #681
  • Fix space validation for AsName and Await by @zsol in #641
  • Qualified Name Provider: Fix returned qname for symbols that are prefixes of each other by @wiyr in #669
  • Rename Codemod: Correct last renamed import from by @toofar in #675
  • Many changes to the Apply Type Comments codemod:
    • Allow for skipping quotes when applying type comments by @stroxler in #644
    • Port pyre fixes by @stroxler in #651
    • Preserve as-imports when merging type annotations. by @martindemello in #664
    • Qualify imported symbols when the dequalified form would cause a conflict by @martindemello in #674
    • Add an argument to always qualify imported type annotations. by @martindemello in #676

Added

  • Create an AddTrailingCommas codemod by @stroxler in #643
  • Define gather global names visitor by @shannonzhu in #657

Updated

  • Support module and package names in the codemod context by @lpetre in #662
  • Drop support for running libcst using a python 3.6 interpreter by @lpetre in #663
  • Update relative import logic to match cpython by @lpetre in #660
  • Scope Provider: Consider access information when computing qualified names for nodes by @lpetre in #682

0.4.1 - 2022-01-28

New Contributors

  • @ariebovenberg made their first contribution in #605
  • @sehz made their first contribution in #598

Added

  • Add docs about the native parts by @zsol in #601
  • Specify minimum rust toolchain version by @zsol in #614
  • build wheels on main branch for linux/arm64 by @zsol in #630

Updated

  • ApplyTypeAnnotationVisitor changes
    • Add support for methods with func type comment excluding self/cls by @stroxler in #622
    • Merge in TypeVars and Generic base classes in ApplyTypeAnnotationVisitor by @martindemello in #596
    • Full handling for applying type comments to Assign by @stroxler in #599
    • Add support for For and With by @stroxler in #607
    • Support FunctionDef transformations by @stroxler in #610
  • change pyo3 as optional dependency in native Python Parser by @sehz in #598
  • add slots to base classes, @add_slots takes bases into account by @ariebovenberg in #605
  • [native] Box most enums by @zsol in #632
  • [native] Return tuples instead of lists in CST nodes by @zsol in #631

Fixed

  • Allow trailing whitespace without newline at EOF by @zsol in #611
  • Handle ast.parse failures when converting function type comments by @stroxler in #616
  • [native] Don't redundantly nest StarredElement inside another Element by @isidentical in #624
  • [native] Allow unparenthesized tuples inside f-strings by @isidentical in #621
  • Don't require whitespace right after match by @isidentical in #628
  • Proxy both parentheses in some pattern matching nodes by @isidentical in #626

0.4.0 - 2022-01-12

This release contains a new parsing infrastructure that is turned off by default. You can enable it by setting the LIBCST_PARSER_TYPE environment variable to native before parsing an input with the usual LibCST APIs. Parsing Python 3.10 documents is only supported in this new mode.

Note: the new parser is built as a native extension, so LibCST will ship with binary wheels from now on.

Added

  • Implement a Python PEG parser in Rust by @zsol in #566
  • implement PEP-654: except* by @zsol in #571
  • Implement PEP-634 - Match statement by @zsol in #568
  • Add instructions to codegen test failures by @stroxler in #582
  • Support Parenthesized With Statements by @stroxler in #584
  • Support relative imports in AddImportsVisitor by @martindemello in #585
  • Codemod for PEP 484 Assign w / type comments -> PEP 526 AnnAssign by @stroxler in #594

Updated

  • Update license headers by @zsol in #560
  • Use precise signature matching when inserting function type annotations by @martindemello in #591

0.3.23 - 2021-11-23

Fixed

  • Fix missing string annotation references #561

0.3.22 - 2021-11-22

Added

  • Add --indent-string option to libcst.tool print #525
  • Publish pre-release packages to test.pypi.org #550
  • Add ImportAssignment class extending Assignment to record assignments for import statements #554

Fixed

  • Various documentation fixes #527, #529
  • Do not add imports if we added no type info in ApplyTypeAnnotationVisitor (commit)
  • Support relative imports in ApplyTypeAnnotationVisitor qualifier handling #538
  • Don't gather metadata if the wrapper already contains it #545
  • Swallow parsing errors in string annotations #548
  • Stop parsing string annotations when no longer in a typing call #546

Updated

  • Move find_qualified_names_for in the Assignment class #557

0.3.21 - 2021-09-21

Fixed

  • Fix pyre command for type inference provider #523

Updated

  • Change codegen to treat typing.Union[Foo, NoneType] and typing.Optional[Foo] as the same [#508]((#508)
  • Rewrite the MatchIfTrue type to be generic on _MatchIfTrueT #512
  • Add python3.9 to the CI #506
  • Various CI changes #471 #510 #505 #515 #516

0.3.20 - 2021-08-09

Fixed

  • Don't reset subprocess environment to fix codemodding on windows #495
  • TypeAnnotationsVisitor: don't truncate function return type #499
  • Docs: Fix typo #492

0.3.19 - 2021-05-12

Updated

  • Return more specific QNames for assignments #477
  • Tie accesses from string annotation to the string node #483

Fixed

  • Fix leaking processes from TypeInferenceProvider #474
  • Fix TypeInferenceProvider breakage with empty cache #476
  • Fix formatting for link to QualifiedName class in docs #480

0.3.18 - 2021-03-29

Added

  • Add FlattenSentinel to support replacing a statement with multiple statements #455
  • Add BuiltinScope #469
  • Add FullyQualifiedNameProvider #465

Updated

  • Split QualifiedNameProvider out from libcst.metadata.scope_provider #464

Fixed

  • Exception while parsing escape character in raw f-strings #462

0.3.17 - 2021-02-08

Updated

  • Optimization: reduce the number of unused parallel processes #440

Fixed

  • Walrus operator's left hand side now has STORE expression context #443
  • ApplyTypeAnnotationsVisitor applies parameter annotations even if no return type is declared #445
  • Work around Windows problem by using dummy pool for jobs=1 #436
  • Remove extra unused imports added in other files #453

0.3.16 - 2020-12-16

Added

  • Support PEP-604 style unions in decorator annotations #429
  • Gathering exports in augmented assignment statements #426

Fixed

  • Don't allow out of order accesses in the global scope #431
  • Handle scope ordering in For statements #430
  • Fix for not parsing subscripts such as cast()["from"] #428
  • Walrus operator's left hand side now has STORE expression context #433

0.3.15 - 2020-12-01

Added

  • Support Named Unicode Characters and yield in f-strings #424

Fixed

  • Assignment/access ordering in comprehensions #423
  • Referencing of remaining objects in cast() #422

0.3.14 - 2020-11-18

Fixed

  • Fix is_annotation for types used in classdef base and assign value #406
  • Visit concatenated f-strings during scope analysis #411
  • Correct handling of walrus operator in function args #417
  • Allow generator expressions in f-strings #419
  • Keep track of assignment/access ordering during scope analysis #413
  • Handle string type references in cast() during scope analysis #418

0.3.13 - 2020-10-12

Fixed

  • Use correct type for AugAssign and AnnAssign target #396
  • Support string annotations for type aliases #401

0.3.12 - 2020-10-01

Fixed

  • fix RemoveImportsVisitor crash when ImportAlias is inserted without comma #397
  • Provide STORE for {Class,Function}Def.name in ExpressionContextProvider #394

0.3.11 - 2020-09-29

Added

  • Implement TypeOf matcher #384

Updated

  • Update return type of ParentNodeProvider to be CSTNode #377
  • Add source code links to each class/function #378

Fixed

  • Removing an import alias with a trailing standalone comment should preserve the comment #392

0.3.10 - 2020-09-17

Added

  • Handle string annotations in ScopeProvider #373
  • Add is_annotation subtype for Access inreferences. #372

Updated

  • Call pyre query with noninteractive logging #371
  • Replace matchers with explicit visitation in gatherers #366
  • Include missing test data in install #365

Fixed

  • Spaces around walrus operator are not required #368
  • SaveMachedNode now matches with trailing empty wildcards #356
  • Correctly extract wildcard matchers #355

0.3.9 - 2020-09-07

Added

  • Support string type annotations in RemoveUnusedImports #353
  • Add scope to ImportAlias #350
  • Add scope to ClassDef #349

Fixed

  • Fixed all pyre related errors #360
  • Fixed enclosing attribute for attributes in call arguments #362

0.3.8 - 2020-07-22

Added

  • Handle type subscripts when applying annotations. #335
  • Added FullRepoManager cache property #330
  • Added optional args for tox commands #327

Updated

  • Only remove trailing comma if the last alias is removed #334

Fixed

  • Fixed inserting imports after module docstring #343
  • Fixed ParenthesizedWhitespace before params in FuncDef #342
  • Fixed validation for ImportAlias and Try statements #340
  • Fixed NotEqual position issue #325
  • Fixed minor typo in scope_provider.py #324

0.3.7 - 2020-06-24

Added

  • Added RenameCommand to rename all instances of a local or imported object to a specified new name. #308

Updated

  • Upgraded Codecov dev dependency to 2.1.4. #311
  • Enabled Pyre strict mode by default. #313

Fixed

  • Fixed ImportError under Python 3.9. #306
  • Fixed stdout being plugged into successfully codemod-ed files. #309
  • Fixed QualifiedName retrieval for names with repeated substrings. #312
  • Fixed default values of keyword-only and positional-only arguments in ApplyTypeAnnotationsVisitor. #314
  • Fixed ExpressionContextProvider by giving subscript values a LOADcontext. #319

0.3.6 - 2020-05-27

Added

  • Added ConvertNamedTupleToDataclassCommand to convert NamedTuple class declarations to Python 3.7 dataclasses using the @dataclass(frozen=True) decorator. #299

Fixed

  • Fixed typo in file name libcst/codemod/commands/convert_percent_format_to_fstring.py. #301
  • Fixed StopIteration exception during scope analysis matching on import names. #302

0.3.5 - 2020-05-12

Updated

  • Expose more granular Assignments and Accesses for dotted imports in ScopeProvider. #284
  • get_qualified_names_for returns the most appropriate qualified name. #290
  • Surface SyntaxError raised by formatter in codemod run. #288 #289
  • Rename ApplyTypeAnnotationsVisitor.add_stub_to_context as ApplyTypeAnnotationsVisitor.store_stub_in_context and add overwrite_existing_annotations to allow overwrite existing type annotations. #289

Fixed

  • Close opened file handles on finishing codemod to avoid Too many open files on OSX. #283

Deprecated

  • ApplyTypeAnnotationsVisitor.add_stub_to_context is renamed as ApplyTypeAnnotationsVisitor.store_stub_in_context.

0.3.4 - 2020-03-27

Added

  • Supported CST parsing for Python 3.0, 3.1 and 3.3. #261
  • Added RemoveUnusedImportsCommand for removing unused import codemod. #266
  • Added ApplyTypeAnnotationsVisitor.add_stub_to_context for apply type annotations from stub modules. #265

Updated

  • Improved exception message of get_metadata when MetadataWrapper is not used. #257
  • New steps for Pyre type check in README.rst which analyzes installed Python sources for better type checking. #262

Fixed

  • Parsed except(Exception): correctly while there is no space after except syntax. #256
  • Fixed RemoveImportsVisitor to not remove imports when references still exist. #264
  • Fixed missing type annotations. #271
  • AddImportsVisitor generates deterministic order for added imports. #274

0.3.3 - 2020-03-05

Added

  • ByteSpanPositionProvider provides start offset and length of CSTNode as metadata.
  • get_docstring helper provides docstring from Module, ClassDef and FunctionDef node types.

Updated

  • Optimized ScopeProvider performance to run faster and use less memory:
    • remove unnecessary Assignment of keyword Arg.
    • don't provide scope object for formatting information nodes.
    • batch set union updates in infer_accesses step.

Fixed

  • Fixed _assignments mutation when calling read-only Scope.get_qualified_names_for and __contains__.

0.3.2 - 2020-02-24

Added

  • Added RemoveImportsVisitor to remove an import if it's not used in a module.
  • Added GatherExportsVisitor to gather exports specified in __all__.
  • Added property helpers evaluated_name and evaluated_name in ImportAlias.
  • Added helper to get full module name: get_absolute_module_for_import and get_absolute_module_for_import_or_raise.
  • Added CodemodContext.full_module_name for full dotted module name.
  • Added format specifiers f-string conversion support to ConvertFormatStringCommand.

Updated

  • Moved LibCST version to _version.py and can print it by python -m libcst.tool --version.
  • Improved EnsureImportPresentCommand with --alias option.
  • Improved ConvertFormatStringCommand with --allow-strip-comments and --allow-await options.

0.3.1 - 2020-02-06

Added

  • Added helpers to get both the raw and evaluated value of a SimpleString.
  • Added helpers to get the quoting and prefix of SimpleString and FormattedString.
  • Added a helper to get the evaluated value of number types.
  • Added templated parsers for statement/expression/module to make constructing updated nodes in transforms easier.
  • FullRepoManager is now integrated into codemods, so metadata requiring full repo analysis can now be used.
  • Added get_full_name_for_node_or_raise helper to remove boilerplate of checking against None.

Updated

  • Upgraded Pyre dependency to 0.0.41.
  • Added additional status to libcst codemod command.
  • get_full_name_for_node now supports decorators.

Fixed

  • Clarified documentation around f-strings, fixed indentation.
  • Fixed libcst list crashing if a codemod does unsafe work on import.
  • Fixed deploy-time dependencies so pyyaml won't have to be manually installed to execute codemods.
  • QualifiedNameProvider no longer erroneously claims names inside attributes are built-ins.

0.3.0 - 2020-01-16

Added

  • Added support for parsing and rendering Python 3.8 source code.
  • Added more documentation for codemods.
  • Added get_full_name_for_expression helper method.
  • Added has_name helper to QualifiedNameProvider.
  • Added a --python-version flag to libcst.tool print utility.

Updated

  • Codemod command can now discover codemods in subdirectories of configured modules.
  • Updgraded Pyre dependency to 0.0.39.

Fixed

  • Cleaned up some typos and formatting issues in comments and documentation.
  • Cleaned up a few redundant typevars.
  • Fixed callable typing in matchers implementation.
  • Fixed incorrect base class references in matcher decorator attribute visitors.
  • Fixed codemod test assertion failing for some whitespace edge cases.
  • Fixed scope analysis to track variable usage on del statements.

Deprecated

  • Deprecated exporting ensure_type from libcst in favor of libcst.helpers.

Removed

  • Removed ExtSlice and helper code in favor of SubscriptElement.
  • Removed default_params attribute on Parameters.
  • Removed SyntacticPositionProvider and BasicPositionProvider.
  • Removed CodePosition and CodeRange exports on libcst in favor of libcst.metadata.

0.2.7 - 2020-01-07

Updated

  • Command-line interface now shows rough estimate of time remaining while executing a codemod.
  • Add needed import now supports import aliases.

0.2.6 - 2020-01-01

Added

  • Added Codemod framework for running code transform over a codebase in parallel.
    • Codemod for code transform logic.
    • CodemodContext for preserving states across transforms.
    • CodemodCommand for CLI interface.
    • CodemodTest for testing codemod easily.
    • yaml codemod config.
    • Pre-build commands in codemod/commands/.
  • Added TypeInferenceProvider for inferred type info from Pyre. A regression test suite was included.
  • Added FullRepoManager for metadata inter-process cache handing.

Fixed

  • Fixed usage link in README.
  • Fixed type annotation for Mypy compatibility.

Updated

  • Upgraded Pyre to 0.0.38

0.2.5 - 2019-12-05

Added

  • Added extract, extractall and replace functions to Matchers API.

Fixed

  • Fixed length restrictions for AllOf and OneOf so that they can be used with sequence expansion operators.
  • Fixed batchable visitors not calling attribute visit functions.
  • Fixed typos in docstrings.
  • Fixed matcher type exception not being pickleable.

Deprecated

  • Deprecated parsing function parameters with defaults into default_params attribute. They can be found in the params attribute instead.

0.2.4 - 2019-11-13

Fixed

  • Fixed broken types for sequence matchers.

0.2.3 - 2019-11-11

Added

  • Preliminary support for 3.8 walrus operator.
  • CI config and fuzz tests for 3.8.
  • Experimental re-entrant codegen API.
  • Added unsafe_skip_copy optimization to MetadataWrapper.
  • Matchers API now includes a findall function.
  • Matchers now have a MatchMetadataIfTrue special matcher.

Updated

  • Updated to latest Black release.
  • Better type documentation for generated matchers.

Fixed

  • Clarified matchers documentation in several confusing areas.
  • Drastically sped up codegen and tests.
  • QualifiedName now supports imported attributtes.
  • ExpressionContext properly marks loop variables as STORE.
  • Various typos in documentation are fixed.

Deprecated

  • Deprecated BasicPositionProvider and SyntacticPositionProvider in favor of WhitespaceInclusivePositionProvider and PositionProvider.

0.2.2 - 2019-10-24

Added

  • Added deep_with_changes helper method on CSTNode.
  • Added metadata support to matchers.
  • Added ability to get the defining node from a LocalScope (FunctionScope, ClassScope or ComprehensionScope).

Updated

  • Many changes to LibCST documentation including a new best practices page and updated scope tutorial.
  • Exported CodePosition and CodeRange from libcst.metadata instead of libcst.

Fixed

  • Disallowed decorating a concrete visit or leave method with @visit or @leave decorators.
  • Renamed position provider classes to be more self-explanatory.
  • Fixed trailing newline detection when the last character in a file was from a continuation.
  • Fixed deep_clone potentially blowing the stack with large LibCST trees.

Deprecated

  • Deprecated ExtSlice in favor of SubscriptElement.
  • Deprecated parsing Subscript slices directly into Index or Slice nodes.

0.2.1 - 2019-10-14

Added

  • Scope.assignments and Scope.accesses APIs to access all references in a scope.
  • Scope analysis tutorial.

Updated

  • Supported <comprehension> in Scope.get_qualified_names_for and QualifiedName.
  • Enforced identity equality for matchers and immutability of non-dataclass matchers.
  • Generalize codegen cleanup steps for all codegen.

Fixed

  • Made BatchableMetadataProvider typing covariant over its typevar.
  • Fixed LICENSE header on generated matcher file.
  • Cleanup unused internal noqa and on-call specification.

0.2.0 - 2019-10-04

Added

  • Added matchers which allow comparing LibCST trees against arbitrary patterns.
  • Improved tree manipulation with deep_remove and deep_replace helper methods on CSTNode.
  • Added new metadata providers: parent node and qualified name.

Updated

  • Updated Pyre to latest release.
  • Updated scope metadata to provide additional helpers.
  • Updated preferred method of removing a node from its parent in a visitor.

Fixed

  • Metadata classes and methods are now exported from "libcst.metadata" instead of several submodules.
  • Fixed LICENSE file to explicitly reference individual files in the repo with different licenses.
  • Fixed deep_clone to correctly clone leaf nodes.
  • Fixed all parse entrypoints to always return a tree with no duplicated leaf nodes.

0.1.3 - 2019-09-18

Added

  • Added preliminary support for parsing Python 3.5 and Python 3.6 source.
  • Added scope analysis metadata provider.
  • Added mypy type support for built package.

Fixed

  • Several typos in documentation are fixed.

0.1.2 - 2019-08-29

Added

  • Added attribute visitor hooks.
  • Added base visit/leave methods which can be subclassed.
  • Hypothesis fuzz testing suite, courtesy of Zac Hatfield-Dodds.

Fixed

  • Metadata documentation is much more complete.
  • Fixed several whitespace validation issues caught by Hypothesis.
  • Parser syntax errors are now used inside parser.

0.1.1 - 2019-08-20

Added

  • Metadata interface is now exported.

Fixed

  • Dependencies are now specified with minimum revisions.
  • Lots of documentation fixes.

0.1 - 2019-07-23

Added

  • First public release of LibCST.
  • Complete, fully typed syntax tree for Python 3.6.
  • Full suite of tests for each defined node type.