Skip to content

type annotation #1233

Open
Open
@Freed-Wu

Description

@Freed-Wu

What is the problem this feature will solve?

Many LSP support type annotations. Such as:

Is it possible to support type annotations for bash? e.g.,

# This should be a brief description of the package and its functionality. Try
# to keep the description to one line of text and to not use the package's name.
#@type string
pkgdesc='default value'

# Defines on which architectures the given package is available (e.g.,
# arch=(i686 x86_64)). Packages that contain no architecture specific files
# should use arch=(any). Valid characters for members of this array are
# alphanumerics and "_".
#@type string[]
arch=()

If we write arch=x86_64 we will get error.
except we change string[] to string[] | string or string[] | 'x86_64'

And we will get document hover from the comment before variable.

And we can introduce more types. like 'true' | 'false' for bool, /\d+/ for number.
@param 1: 'true' | 'false' for function input $1. Even we can define new types. like:
@typedef boolean: 'true' | 'false'

What is the feature you are proposing to solve the problem?

type annotation

What alternatives have you considered?

termux-language-server use json schema to annotate type of variables. However, it is specific, not flexible.
For PKGBUILD, there is a PKGBUILD.json.
If we realize type annotation, we can use PKGBUILD.d.sh, %.ebuild.sh, build.sh.d.sh for PKGBUILD, ebuild, build.sh.
We even can introduce some magic comments. e.g., we add #@source PKGBUILD.d.sh to test.sh, it will use types of PKGBUILD.d.sh.
or #@source https://a_URL_like_DefinitelyTyped/PKGBUILD.d.sh.

*.d.sh is like *.d.ts. It is also helpful for other projects like shellcheck.

And some bash script provide some function as a wrapper of source. such as ebuild's inherit.

If we inherit toolchain-funcs, it will source $EPREFIX/var/db/repos/gentoo/eclass/toolchain-funcs.eclass and user can use the functions defined toolchain-funcs.eclass. we can use the code
in %.ebuild.d.sh:

inherit() {
  source $EPREFIX/var/db/repos/gentoo/eclass/$1.eclass
}

Like after import XXX then use functions defined in XXX.py? Attractive and a little hard to realize?

Just my 2c. Welcome to discuss!

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions