Skip to content
This repository has been archived by the owner on Mar 9, 2022. It is now read-only.

Commit

Permalink
v1.0.1a1 (#14)
Browse files Browse the repository at this point in the history
* Added zenodo shield.

* Bump rich from 9.12.0 to 9.12.3 (#11)

* Bump rich from 9.12.3 to 9.12.4 (#12)

* Bump pandas from 1.2.2 to 1.2.3 (#13)

* Added parser functions for HUSH, oligo-melting, and OligoArrayAux

* Added assert for dtype compatibility

* Added dtypes and expected database columns

* Changed entry points for db related actions

* Implemented db make script

* Added final message.

* Cosmetic changes.

* Added interface for database-related scripts.

* Cleaned

* Added basic info script

* Added DataBase and Record classes

* Simplified using DataBase class.

* Prepared to store other information on chromosomes (e.g., record no)

* Implemented script to dump tsv to std.

* Updated chromosome-related asserts, logs, and properties

* Added header printing and tqdm progression

* Added chromosome prefix option. Switched from defaultdict to dict for pickling

* Added dump description

* Added record sorting step.

* Added sorted check

* Cosmetic

* Added ChromosomeData and ChromosomeIndex classes

* Added missing declaration and exposed chromosome index

* Switched from rich to tqdm. Fixed index visibility in wrappers

* Added options for region dumping.

* Removed redundant function

* Implemented database jumping and window walk

* Updated version tag and promoted to beta. Added 3.9 to GHAction.

* Added Typed classifier

* Linked new database and old walker.

* Removed old database module.

* Added indexing progress bar

* Fixed dump of a region.

* Changed default database index bin size to 100 kb

* Fixed issue of empty index bins.

* Blacked.

* Refactored ChromosomeData and added ChromosomeDict class.

* Dropped sequence_length column. Fixed pickling of ChromosomeData.

* Added reindex entry point.

* Bump rich from 9.12.4 to 9.13.0 (#15)

* Bump tqdm from 4.58.0 to 4.59.0 (#16)

* Split chromosome classes from database. Added docstrings.

* Implementing new walker.

* Implemented walker with growing focus region.

* Moved database walking to walker class

* Added tests.

* Added test_data to package.

* Added pytest setup

* Fixed pytest setup

* Added pytest to and updated dependencies

* Moved GenomicRegion to new region module

* Moved pytest and black to dev dependencies

* Implemented region builder and multi walk

* Implementing new query script

* Fixed decoding

* Added docstrings

* Hidden some prototype code tagged by vulture

* Fixed links

* Fixed link to repo

* Fixed threads check.

* Updated version management.

* Dropped support for Python 3.7

* Removed default number of queried probes.

* Bump rich from 9.13.0 to 10.0.0 (#19)

* Bump numpy from 1.20.1 to 1.20.2 (#18)

* Bump rich from 10.0.0 to 10.0.1 (#20)

* Bump tqdm from 4.59.0 to 4.60.0 (#23)

* Bump pytest from 6.2.2 to 6.2.3 (#22)

* Bump rich from 10.0.1 to 10.1.0 (#21)

* Bump pandas from 1.2.3 to 1.2.4 (#24)

* Bump black from 20.8b1 to 21.4b0 (#25)

* Bump black from 21.4b0 to 21.4b1 (#26)

* Bump black from 21.4b1 to 21.4b2 (#27)

* Bump black from 21.4b2 to 21.5b0 (#28)

* Bump pytest from 6.2.3 to 6.2.4 (#29)

* Bump rich from 10.1.0 to 10.2.0 (#32)

* Bump black from 21.5b0 to 21.5b1 (#31)

* Bump numpy from 1.20.2 to 1.20.3 (#30)

* Bump rich from 10.2.0 to 10.2.2 (#34)

* Bump black from 21.5b1 to 21.5b2 (#36)

* Bump tqdm from 4.60.0 to 4.61.0 (#35)

* Bump rich from 10.2.2 to 10.3.0 (#37)

* Bump black from 21.5b2 to 21.6b0 (#38)

* Bump tqdm from 4.61.0 to 4.61.1 (#39)

* Bump rich from 10.3.0 to 10.4.0 (#40)

* Bump pandas from 1.2.4 to 1.2.5 (#41)

* Bump numpy from 1.20.3 to 1.21.0 (#42)

* Bump pandas from 1.2.5 to 1.3.0 (#43)

* Bump rich from 10.4.0 to 10.5.0 (#45)

* Bump tqdm from 4.61.1 to 4.61.2 (#44)

* Bump rich from 10.5.0 to 10.6.0 (#46)

* Bump black from 21.6b0 to 21.7b0 (#47)

* Bump numpy from 1.21.0 to 1.21.1 (#48)

* Bump tqdm from 4.61.2 to 4.62.0 (#50)

* Bump pandas from 1.3.0 to 1.3.1 (#49)

* Bump rich from 10.6.0 to 10.7.0 (#51)

* Bump tqdm from 4.62.0 to 4.62.1 (#52)

* Bump pandas from 1.3.1 to 1.3.2 (#53)

* Bump tqdm from 4.62.1 to 4.62.2 (#54)

* Bump rich from 10.7.0 to 10.9.0 (#55)

* Bump black from 21.7b0 to 21.8b0 (#56)

* Bump pytest from 6.2.4 to 6.2.5 (#57)

* 'Refactored by Sourcery' (#58)

Co-authored-by: Sourcery AI <>

* Blacked, flaked, and mypyed

* Bump pandas from 1.3.2 to 1.3.3 (#59)

* Bump black from 21.8b0 to 21.9b0 (#60)

* Bump rich from 10.9.0 to 10.10.0 (#61)

* Bump tqdm from 4.62.2 to 4.62.3 (#62)

* Bump rich from 10.10.0 to 10.11.0 (#63)

* Argparse to click (#65)

* Updated dependencies

* Preparing for click.

* Swapped argparse for click and using dataclasses

* 'Refactored by Sourcery' (#66)

Co-authored-by: Sourcery AI <>

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* Blacked

* 'Refactored by Sourcery' (#67)

Co-authored-by: Sourcery AI <>

* Blacked.

* Now passing tests.

* Added biopython dependency and extract_kmers script. (#68)

* 'Refactored by Sourcery' (#70)

Co-authored-by: Sourcery AI <>

* Improved extract_kmers script

* 'Refactored by Sourcery' (#71)

Co-authored-by: Sourcery AI <>

* Mypyed after sorcery refactoring

* Bump rich from 10.11.0 to 10.12.0 (#72)

* Added autocompletion. (#73)

* Added autocompletion.

* 'Refactored by Sourcery' (#74)

Co-authored-by: Sourcery AI <>

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* Fixed __path__

* Added missing fasta header starting character

* Bump click from 8.0.1 to 8.0.3 (#75)

* Added compatibility with previous database pickled arguments.

* Added pre-commits.

* Fixed spelling

* Added support for hush gzipped files

* Create .deepsource.toml

* Fix comparison constant position (#76)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Replace `dict` call with comprehension (#77)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Remove unnecessary use of comprehension (#78)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Change methods not using its bound instance to staticmethods (#79)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Remove assert statement from non-test files (#80)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Set `check` flag to `True` (#82)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Remove implicit `object` from the base class (#83)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Remove assert statement from non-test files (#84)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Refactor unnecessary `else` / `elif` when `if` block has a `continue` statement (#85)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Refactor unnecessary `else` / `elif` when `if` block has a `return` statement (#86)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Use literal syntax to create data structure (#87)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Merge collapsible `if` statements (#88)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* fix: added docstring explaining emptiness.

* fix: added docstring explaining emptiness.

* Refactor unnecessary `else` / `elif` when `if` block has a `raise` statement (#89)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Remove unnecessary `pass` (#90)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* Remove methods with unnecessary super delegation. (#91)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* fix: probe selection & unreachable statements

* Remove unused private attribute (#92)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* fix: Multi-line docstring closing quotes should be on a separate line

* fix: swapped single for double quotes

* fix: inconsistent return statements

* fix: blacked.

* fix: process from shell, escaping parameters

* fix: inconsistent return statements

* fix: removed unused private attribute

* fix: escaping shell subprocess cmd

* fix: open files with `with` statement

* fix: quoted upon subprocess spawning

* Merge collapsible `with` statements (#95)

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>

* fix: blacked

* 'Refactored by Sourcery' (#81)

Co-authored-by: Sourcery AI <>

* Dropped broken scripts test.

* fix: added test placeholder

* Bump pandas from 1.3.3 to 1.3.4 (#97)

* Bump black from 21.9b0 to 21.10b0 (#98)

* Bump rich from 10.12.0 to 10.13.0 (#99)

* Bump black from 21.10b0 to 21.11b0 (#100)

* Bump rich from 10.13.0 to 10.14.0 (#101)

* Bump black from 21.11b0 to 21.11b1 (#102)

* fix: wrong condition of path_exists function

* fix: correct variable names

* fix: assertions on input params

* Bump rich from 10.14.0 to 10.15.0 (#103)

* Bump rich from 10.15.0 to 10.15.1 (#104)

* Bump rich from 10.15.1 to 10.15.2 (#105)

* Bump black from 21.11b1 to 21.12b0 (#106)

* fix: minor assert change

* fix: trove classifier

* doc: updated with version flag

* docs: updated version flag

* feat: updated lock file

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>
  • Loading branch information
4 people authored Dec 7, 2021
1 parent cdb2e14 commit b480240
Show file tree
Hide file tree
Showing 49 changed files with 25,766 additions and 815 deletions.
16 changes: 16 additions & 0 deletions .deepsource.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version = 1

[[analyzers]]
name = "shell"
enabled = true

[[analyzers]]
name = "secrets"
enabled = true

[[analyzers]]
name = "python"
enabled = true

[analyzers.meta]
runtime_version = "3.x.x"
12 changes: 6 additions & 6 deletions .github/workflows/pythonpackage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
fail-fast: true
matrix:
os: ["ubuntu-latest"]
python-version: [3.7, 3.8]
python-version: [3.8, 3.9]
runs-on: ${{ matrix.os }}
steps:
# Checkout repo and setup python
Expand All @@ -62,8 +62,8 @@ jobs:
- name: Install dependencies
run: poetry install
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
# run test suite
# - name: Test
# run: |
# source .venv/bin/activate
# pytest radiantkit/tests/
# run: test suite
- name: Test
run: |
source .venv/bin/activate
pytest ifpd2/tests/
38 changes: 38 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
default_language_version:
python: python3.8
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: "v4.0.1"
hooks:
- id: check-added-large-files
- id: check-ast
- id: check-docstring-first
- id: check-yaml
- repo: https://github.com/pre-commit/mirrors-mypy
rev: "v0.910-1"
hooks:
- id: mypy
- repo: https://github.com/psf/black
rev: "21.9b0"
hooks:
- id: black
- repo: https://github.com/PyCQA/flake8
rev: "4.0.1"
hooks:
- id: flake8
args: ["--count", "--select=E9,F63,F7,F82", "--show-source", "--statistics"]
- id: flake8
args: ["--count", "--exit-zero", "--max-complexity=5", "--max-line-length=88", "--ignore=E203", "--statistics"]
- repo: https://github.com/jendrikseipp/vulture
rev: "v2.3"
hooks:
- id: vulture
- repo: https://github.com/codespell-project/codespell
rev: v2.1.0
hooks:
- id: codespell
entry: codespell --ignore-words=ignore-spelling-words.txt
language: python
types: [text]
17 changes: 14 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,20 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.


## Unreleased
### ...
- ...

## [1.0.1a1] - 2021-12-07
### Added
- New entry points: `db make`, `db dump`, `db info`, `db merge`, and `db_reindex`.
- Module `io` with parsing functions for output generated via oligo-melting, hush, or OligoArrayAux.
- Assert for compatibility with a given dtype. (only max value currently checked)

### Changed
- New database format.
- `dbchk` entry point changed to `db check`.
- Dropped sequence length column, as it can be inferred from the end/start columns.
- Removed `-X` default from `query`.

## [1.0.0-alpha] - 2021-02-26

[1.0.0-alpha] https://github.com/ggirelli/ifpd/releases/tag/v1.0.0-alpha
[1.0.1a1] https://github.com/ggirelli/ifpd2/releases/tag/v1.0.1a1
[1.0.0-alpha] https://github.com/ggirelli/ifpd2/releases/tag/v1.0.0-alpha
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# iFISH Probe Design (II)

![](https://img.shields.io/github/license/ggirelli/ifpd2.svg?style=flat) ![](https://github.com/ggirelli/ifpd2/workflows/Python%20package/badge.svg?branch=main&event=push)
[![DOI](https://zenodo.org/badge/210782569.svg)](https://zenodo.org/badge/latestdoi/210782569) ![](https://img.shields.io/github/license/ggirelli/ifpd2.svg?style=flat) ![](https://github.com/ggirelli/ifpd2/workflows/Python%20package/badge.svg?branch=main&event=push)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ifpd2) ![PyPI - Format](https://img.shields.io/pypi/format/ifpd2) ![PyPI - Status](https://img.shields.io/pypi/status/ifpd2)
![](https://img.shields.io/github/release/ggirelli/ifpd2.svg?style=flat) ![](https://img.shields.io/github/release-date/ggirelli/ifpd2.svg?style=flat) ![](https://img.shields.io/github/languages/code-size/ggirelli/ifpd2.svg?style=flat)
![](https://img.shields.io/github/watchers/ggirelli/ifpd2.svg?label=Watch&style=social) ![](https://img.shields.io/github/stars/ggirelli/ifpd2.svg?style=social)

[PyPi](https://pypi.org/project/ifpd2/) | [docs](https://ggirelli.github.io/ifpd2/)

`ifpd2` is a Python3.7+ package containing tools for selection of complementary oligonucleotides to build iFISH probes. It is based on our previous `ifpd` package, but works with a different and more detailed database format, allowing for more precise control on the probe design process. Read the online [documentation](https://ggirelli.github.io/ifpd2/) for more details.
`ifpd2` is a Python3.8+ package containing tools for selection of complementary oligonucleotides to build iFISH probes. It is based on our previous `ifpd` package, but works with a different and more detailed database format, allowing for more precise control on the probe design process. Read the online [documentation](https://ggirelli.github.io/ifpd2/) for more details.

## Requirements

`ifpd2` is fully implemented in Python3.7+, thus you need the corresponding Python version to run it. Check out [here](https://realpython.com/installing-python/) how to install Python+ on your machine if you don't have it yet.
`ifpd2` is fully implemented in Python3.8+, thus you need the corresponding Python version to run it. Check out [here](https://realpython.com/installing-python/) how to install Python+ on your machine if you don't have it yet.

`ifpd2` has been tested with Python 3.7 and 3.8. We recommend installing it using `pipx` (see [below](https://github.com/ggirelli/ifpd2#installation)) to avoid dependency conflicts with other packages. The packages it depends on are listed in our [dependency graph](https://github.com/ggirelli/ifpd2/network/dependencies). We use [`poetry`](https://github.com/python-poetry/poetry) to handle our dependencies.
`ifpd2` has been tested with Python 3.8 and 3.9. We recommend installing it using `pipx` (see [below](https://github.com/ggirelli/ifpd2#installation)) to avoid dependency conflicts with other packages. The packages it depends on are listed in our [dependency graph](https://github.com/ggirelli/ifpd2/network/dependencies). We use [`poetry`](https://github.com/python-poetry/poetry) to handle our dependencies.

## Installation

Expand Down
23 changes: 19 additions & 4 deletions ifpd2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,32 @@
@contact: gigi.ga90@gmail.com
"""

from ifpd2.const import __version__
from ifpd2 import asserts
from ifpd2 import database, walker
from ifpd2 import asserts, dataclasses, fasta, io
from ifpd2 import walker, walker2
from ifpd2 import chromosome, database, region
from ifpd2 import oligo, probe, probe_set

from importlib.metadata import version, PackageNotFoundError
from typing import List

try:
__version__ = version(__name__)
except PackageNotFoundError:
pass

__all__ = [
"__version__",
"asserts",
"database",
"dataclasses",
"fasta",
"io",
"walker",
"walker2",
"chromosome",
"database",
"region",
"oligo",
"probe",
"probe_set",
]
__path__: List[str]
56 changes: 43 additions & 13 deletions ifpd2/asserts.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,67 @@
"""

import logging
import numpy as np # type: ignore
import sys
from typing import Callable


def ert_type(x, stype, label):
assert isinstance(x, stype), f"{label} should be {stype}, {type(x)} instead"
if not isinstance(x, stype):
raise AssertionError(f"{label} should be {stype}, {type(x)} instead")


def ert_multiTypes(x, types, label):
cond = any([isinstance(x, t) for t in types])
assert cond, f"{label} should be one of {types}, {type(x)} instead"
cond = any(isinstance(x, t) for t in types)
if not cond:
raise AssertionError(f"{label} should be one of {types}, {type(x)} instead")


def ert_nonNeg(x, label, include_zero=False):
if not include_zero:
assert x > 0, f"{label} should be greater than 0"
else:
assert x >= 0, f"{label} should be greater than or equal to 0"
if x <= 0:
raise AssertionError(f"{label} should be greater than 0")
elif x < 0:
raise AssertionError(f"{label} should be greater than or equal to 0")


def ert_inInterv(x, vmin, vmax, label, leftClose=False, rightClose=True):
if leftClose:
if rightClose:
assert x >= vmin and x <= vmax, f"expected {vmin}<={label}<={vmax}"
else:
assert x >= vmin and x < vmax, f"expected {vmin}<={label}<{vmax}"
if x < vmin or x > vmax:
raise AssertionError(f"expected {vmin}<={label}<={vmax}")
elif x < vmin or x >= vmax:
raise AssertionError(f"expected {vmin}<={label}<{vmax}")
elif rightClose:
if x <= vmin or x > vmax:
raise AssertionError(f"expected {vmin}<{label}<={vmax}")
elif x <= vmin or x >= vmax:
raise AssertionError(f"expected {vmin}<{label}<{vmax}")


def ert_in_dtype(x, dtype):
if dtype.startswith("f"):
if x > np.finfo(dtype).max:
raise AssertionError(
" ".join(
[
"expected to be lower than {dtype} max:",
f"{x} < {np.finfo(dtype).max}",
]
)
)
elif dtype.startswith("u") or dtype.startswith("i"):
if x > np.iinfo(dtype).max:
raise AssertionError(
" ".join(
[
"expected to be lower than {dtype} max:",
f"{x} < {np.iinfo(dtype).max}",
]
)
)
else:
if rightClose:
assert x > vmin and x <= vmax, f"expected {vmin}<{label}<={vmax}"
else:
assert x > vmin and x < vmax, f"expected {vmin}<{label}<{vmax}"
logging.warning(f"assert not implemented for dtype '{dtype}'")


def enable_rich_assert(fun: Callable) -> Callable:
Expand Down
29 changes: 29 additions & 0 deletions ifpd2/autocomplete/.ifpd2-complete.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
_ifpd2_completion() {
local IFS=$'\n'
local response

response=$(env COMP_WORDS="${COMP_WORDS[*]}" COMP_CWORD=$COMP_CWORD _IFPD2_COMPLETE=bash_complete $1)

for completion in $response; do
IFS=',' read type value <<< "$completion"

if [[ $type == 'dir' ]]; then
COMREPLY=()
compopt -o dirnames
elif [[ $type == 'file' ]]; then
COMREPLY=()
compopt -o default
elif [[ $type == 'plain' ]]; then
COMPREPLY+=($value)
fi
done

return 0
}

_ifpd2_completion_setup() {
complete -o nosort -F _ifpd2_completion ifpd2
}

_ifpd2_completion_setup;

22 changes: 22 additions & 0 deletions ifpd2/autocomplete/.ifpd2-complete.fish
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
function _ifpd2_completion;
set -l response;

for value in (env _IFPD2_COMPLETE=fish_complete COMP_WORDS=(commandline -cp) COMP_CWORD=(commandline -t) ifpd2);
set response $response $value;
end;

for completion in $response;
set -l metadata (string split "," $completion);

if test $metadata[1] = "dir";
__fish_complete_directories $metadata[2];
else if test $metadata[1] = "file";
__fish_complete_path $metadata[2];
else if test $metadata[1] = "plain";
echo $metadata[2];
end;
end;
end;

complete --no-files --command ifpd2 --arguments "(_ifpd2_completion)";

35 changes: 35 additions & 0 deletions ifpd2/autocomplete/.ifpd2-complete.zsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#compdef ifpd2

_ifpd2_completion() {
local -a completions
local -a completions_with_descriptions
local -a response
(( ! $+commands[ifpd2] )) && return 1

response=("${(@f)$(env COMP_WORDS="${words[*]}" COMP_CWORD=$((CURRENT-1)) _IFPD2_COMPLETE=zsh_complete ifpd2)}")

for type key descr in ${response}; do
if [[ "$type" == "plain" ]]; then
if [[ "$descr" == "_" ]]; then
completions+=("$key")
else
completions_with_descriptions+=("$key":"$descr")
fi
elif [[ "$type" == "dir" ]]; then
_path_files -/
elif [[ "$type" == "file" ]]; then
_path_files -f
fi
done

if [ -n "$completions_with_descriptions" ]; then
_describe -V unsorted completions_with_descriptions -U
fi

if [ -n "$completions" ]; then
compadd -U -V unsorted -a completions
fi
}

compdef _ifpd2_completion ifpd2;

Loading

0 comments on commit b480240

Please sign in to comment.