Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for the Nix expression language (Nix / NixOS) #261

Open
blueyed opened this issue Mar 7, 2015 · 11 comments
Open

Support for the Nix expression language (Nix / NixOS) #261

blueyed opened this issue Mar 7, 2015 · 11 comments

Comments

@blueyed
Copy link
Contributor

blueyed commented Mar 7, 2015

Description: https://nixos.org/nix/manual/#ch-expression-language

There is some very basic config in https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/tools/misc/ctags/wrapped.nix:

--langdef=NIX
--langmap=NIX:.nix
--regex-NIX=/([^ \t*]*)[ \t]*=/\1/f/

I have (hopefully) improved this a bit locally:

--regex-NIX=/([^ \t*]*)[ \t]*=.*:/\1/f/

But it's still too basic and would need a separate parser probably.

I am new to Nix/NixOS myself, and have therefore not much knowledge
about this language myself.

blueyed referenced this issue in NixOS/nixpkgs Mar 7, 2015
svn path=/nixpkgs/trunk/; revision=18483
@vcunat
Copy link

vcunat commented Mar 7, 2015

Nix itself parses the language - it uses standard parsing and lexing tools https://github.com/NixOS/nix/tree/master/src/libexpr (probably most useful in context of this issue). Then I know about some stuff in haskell https://github.com/peti/language-nix, and there are syntax highlighters for various editors (or highlighting libraries).

@masatake
Copy link
Member

masatake commented Mar 8, 2015

As an initial version, a regular expression based implementation is o.k; it is always better than nothing.
Though I have to rethink the directory structures, optlib is the first class way to implement an parser.
You can write a C based parser later. The important point is the "kinds" compatibility between regex
based parser and C based parser. If the compatibility of kinds are kept, no one takes care the way of implementation.

However, if nix implementation has real parser, why don't you utilize it? My xmcd is for you.
See data/optlib/cofee.ctags and libexec/drivers/coffeetags.

@roosemberth
Copy link

Hi, what's the status of this issue?

@masatake
Copy link
Member

masatake commented Dec 9, 2020

A pull request is welcome.

@masatake masatake closed this as completed Dec 9, 2020
@lf-
Copy link

lf- commented Jul 4, 2021

If anyone wants a Nix ctags implementation, I wrote one in my tool here: https://github.com/lf-/nix-doc

It's Rust so not possible to integrate here though.

@bsima
Copy link

bsima commented Jun 10, 2024

fwiw this has been working for me, just drop this into ~/.ctags.d/nix.ctags

--langdef=nix
--languages=+nix
--langmap=nix:.nix
# packages are "name = <tag>" or "pname = <tag>"
--kinddef-nix=p,package,package definition
--regex-nix=/[p?]name\s*=\s*"(\w+)"/\1/p/
# functions have args, so look for a : right of the =
--kinddef-nix=f,function,function definition
--regex-nix=/(\S+)\s*=\s+\w+:/\1/f/
# attrs just have =, but only index if they have >=4 chars
--kinddef-nix=a,attr,attribute definition
--regex-nix=/\s+([a-zA-Z_0-9-]{4,20})\s*=/\1/a/

@masatake
Copy link
Member

Why don't you make a pull request to integrate it into ctags?

@bsima
Copy link

bsima commented Jun 13, 2024

Well I'm not very good at C, but I could give it the old college try

@masatake
Copy link
Member

NO. You don't have to use C.
Universal Ctags has a quack translator named optlib2c that converts your .ctags to C.
So, you make your parser written in .ctags a built-in parser. See https://github.com/universal-ctags/ctags/tree/master/optlib . Many parsers are written in the way.

See 599cc35 as an example. Though it includes .c file but it is translated from .ctags from optlib2c.
A perl interpreter is needed on your platform.

Let me know if you want to integrate your .ctags into Universal Ctags.
I will explain the details.

@bsima
Copy link

bsima commented Jun 13, 2024

Okay, I will try and follow the PkgConfig example tonight

@masatake masatake reopened this Jun 13, 2024
@bsima
Copy link

bsima commented Jun 14, 2024

I got it started here #4020

Will continue work on it tomorrow. But I think I'm moving in the right direction.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants