Skip to content

Commit 959110b

Browse files
authored
feat(module): snippets for import of child modules (#17)
1 parent 9da75c2 commit 959110b

File tree

12 files changed

+281
-87
lines changed

12 files changed

+281
-87
lines changed

.luacheckrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ignore = {
22
"631", -- max_line_length
33
"122", -- read-only field of global variable
4+
"512", -- loop executed at most once
45
}
56
read_globals = {
67
"vim",

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ All notable changes to this project will be documented in this file.
66
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
77
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
88

9+
## [1.4.0] - 2023-12-05
10+
11+
- Module imports:
12+
- `qualc` snippet for qualified import of child modules.
13+
- `impc` snippet for unqualified import of child modules.
14+
915
## [1.3.0] - 2023-12-05
1016

1117
- Expressions: Add multi-way if snippet (`ifmw`) [[#16](https://github.com/mrcjkb/haskell-snippets.nvim/pull/16)].

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,20 @@ ls.add_snippets('haskell', haskell_snippets, { key = 'haskell' })
119119

120120
![tty](https://github.com/mrcjkb/haskell-snippets.nvim/assets/12857160/c62eac49-e06c-4ed9-9a9c-b987c1ad498c)
121121

122+
#### `haskell-snippets.module.impc`
123+
124+
- Trigger: `impc`
125+
- Requires a tree-sitter parser for Haskell.
126+
127+
![tty](https://github.com/mrcjkb/haskell-snippets.nvim/assets/12857160/6ffc5f2f-c734-4e48-ac13-99ba1f9a0b18)
128+
129+
#### `haskell-snippets.module.qualc`
130+
131+
- Trigger: `qualc`
132+
- Requires a tree-sitter parser for Haskell.
133+
134+
![tty](https://github.com/mrcjkb/haskell-snippets.nvim/assets/12857160/43cef52f-eeda-48ad-bb2d-86241ac715b2)
135+
122136
### Data and typeclasses
123137

124138
#### `haskell-snippets.data.adt`

doc/haskell-snippets.txt

Lines changed: 138 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,29 @@ HaskellSnippetCollection *HaskellSnippetCollection*
2929

3030
PragmaSnippetCollection *PragmaSnippetCollection*
3131

32-
Fields: ~
33-
{prag} (Snippet) Compiler pragma
34-
{lang} (Snippet) Language pragma
35-
{discover} (Snippet) Hspec/Sydtest discover GHC option
36-
{nowarn} (Snippet) GHC option
32+
33+
pragmas.prag *pragmas.prag*
34+
35+
Type: ~
36+
(Snippet) Compiler pragma
37+
38+
39+
pragmas.lang *pragmas.lang*
40+
41+
Type: ~
42+
(Snippet) Language pragma
43+
44+
45+
pragmas.discover *pragmas.discover*
46+
47+
Type: ~
48+
(Snippet) Hspec/Sydtest discover GHC option
49+
50+
51+
pragmas.nowarn *pragmas.nowarn*
52+
53+
Type: ~
54+
(Snippet) GHC option
3755

3856

3957
==============================================================================
@@ -43,9 +61,29 @@ PragmaSnippetCollection *PragmaSnippetCollection*
4361

4462
ModuleSnippetCollection *ModuleSnippetCollection*
4563

46-
Fields: ~
47-
{mod} (Snippet) Module declaration
48-
{qual} (Snippet) Qualified import
64+
65+
module.mod *module.mod*
66+
67+
Type: ~
68+
(Snippet) Module declaration
69+
70+
71+
module.qual *module.qual*
72+
73+
Type: ~
74+
(Snippet) Qualified import
75+
76+
77+
module.impc *module.impc*
78+
79+
Type: ~
80+
(Snippet|nil) Import (child module)
81+
82+
83+
module.qualc *module.qualc*
84+
85+
Type: ~
86+
(Snippet|nil) Qualified import (child module)
4987

5088

5189
==============================================================================
@@ -55,13 +93,41 @@ ModuleSnippetCollection *ModuleSnippetCollection*
5593

5694
DataSnippetCollection *DataSnippetCollection*
5795

58-
Fields: ~
59-
{adt} (Snippet) Algebraic data type
60-
{newtype} (Snippet) newtype
61-
{rec} (Snippet) Record
62-
{cls} (Snippet) Typeclass
63-
{ins} (Snippet) Typeclass instance
64-
{constraint} (Snippet) Typeclass constraint
96+
97+
data.adt *data.adt*
98+
99+
Type: ~
100+
(Snippet) Algebraic data type
101+
102+
103+
data.newtype *data.newtype*
104+
105+
Type: ~
106+
(Snippet) newtype
107+
108+
109+
data.rec *data.rec*
110+
111+
Type: ~
112+
(Snippet) Record
113+
114+
115+
data.cls *data.cls*
116+
117+
Type: ~
118+
(Snippet) Typeclass
119+
120+
121+
data.ins *data.ins*
122+
123+
Type: ~
124+
(Snippet) Typeclass instance
125+
126+
127+
data.constraint *data.constraint*
128+
129+
Type: ~
130+
(Snippet) Typeclass constraint
65131

66132

67133
==============================================================================
@@ -71,10 +137,23 @@ DataSnippetCollection *DataSnippetCollection*
71137

72138
FunctionSnippetCollection *FunctionSnippetCollection*
73139

74-
Fields: ~
75-
{fun} (Snippet) Function and type signature
76-
{func} (Snippet) Function and type signature (multi-line)
77-
{lambda} (Snippet) Lambda
140+
141+
functions.fn *functions.fn*
142+
143+
Type: ~
144+
(Snippet) Function and type signature
145+
146+
147+
functions.func *functions.func*
148+
149+
Type: ~
150+
(Snippet) Function and type signature (multi-line)
151+
152+
153+
functions.lambda *functions.lambda*
154+
155+
Type: ~
156+
(Snippet) Lambda
78157

79158

80159
==============================================================================
@@ -84,12 +163,35 @@ FunctionSnippetCollection *FunctionSnippetCollection*
84163

85164
ExpressionSnippetCollection *ExpressionSnippetCollection*
86165

87-
Fields: ~
88-
{if_expr} (Snippet) if expression
89-
{if_expr_multiline} (Snippet) if expression (multi-line)
90-
{if_expr_multiway} (Snippet) if expression (multi-way)
91-
{case} (Snippet) case expression (pattern match)
92-
{lambdacase} (Snippet) lambda case (pattern match)
166+
167+
expressions.if_expr *expressions.if_expr*
168+
169+
Type: ~
170+
(Snippet) if expression
171+
172+
173+
expressions.if_expr_multiline *expressions.if_expr_multiline*
174+
175+
Type: ~
176+
(Snippet) if expression (multi-line)
177+
178+
179+
expressions.if_expr_multiway *expressions.if_expr_multiway*
180+
181+
Type: ~
182+
(Snippet) if expression (multi-way)
183+
184+
185+
expressions.case *expressions.case*
186+
187+
Type: ~
188+
(Snippet) case expression (pattern match)
189+
190+
191+
expressions.lambdacase *expressions.lambdacase*
192+
193+
Type: ~
194+
(Snippet) lambda case (pattern match)
93195

94196

95197
==============================================================================
@@ -99,9 +201,17 @@ ExpressionSnippetCollection *ExpressionSnippetCollection*
99201

100202
QuasiQuoteSnippetCollection *QuasiQuoteSnippetCollection*
101203

102-
Fields: ~
103-
{qq} (Snippet) QuasiQuote
104-
{sql} (Snippet) postgres-simple [sql||] QuasiQuote
204+
205+
quasiquotes.qq *quasiquotes.qq*
206+
207+
Type: ~
208+
(Snippet) QuasiQuote
209+
210+
211+
quasiquotes.sql *quasiquotes.sql*
212+
213+
Type: ~
214+
(Snippet) postgres-simple [sql||] QuasiQuote
105215

106216

107217
vim:tw=78:ts=8:noet:ft=help:norl:

flake.nix

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,13 @@
8282
devShell = pkgs.mkShell {
8383
name = "haskell-snippets-devShell";
8484
inherit (pre-commit-check) shellHook;
85-
buildInputs = with pkgs; [
86-
zlib
85+
buildInputs = with pre-commit-hooks.packages.${system}; [
86+
alejandra
87+
lua-language-server
88+
stylua
89+
luacheck
90+
editorconfig-checker
91+
markdownlint-cli
8792
];
8893
};
8994
in {

lua/haskell-snippets/data.lua

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,8 @@
55
---@brief ]]
66

77
---@class DataSnippetCollection
8-
---@field adt Snippet Algebraic data type
9-
---@field newtype Snippet newtype
10-
---@field rec Snippet Record
11-
---@field cls Snippet Typeclass
12-
---@field ins Snippet Typeclass instance
13-
---@field constraint Snippet Typeclass constraint
14-
15-
---@type DataSnippetCollection
168
local data = {
9+
---@type Snippet[] All data-related snippets
1710
all = {},
1811
}
1912

@@ -44,6 +37,7 @@ adt_constructor_choice = function()
4437
})
4538
end
4639

40+
---@type Snippet Algebraic data type
4741
data.adt = s({
4842
trig = 'adt',
4943
dscr = 'Algebraic data type',
@@ -71,6 +65,7 @@ data.adt = s({
7165
})
7266
table.insert(data.all, data.adt)
7367

68+
---@type Snippet newtype
7469
data.newtype = s({
7570
trig = 'new',
7671
dscr = 'newtype',
@@ -116,6 +111,7 @@ record_field_choice = function()
116111
})
117112
end
118113

114+
---@type Snippet Record
119115
data.rec = s({
120116
trig = 'rec',
121117
dscr = 'Record',
@@ -160,6 +156,7 @@ data.rec = s({
160156
})
161157
table.insert(data.all, data.rec)
162158

159+
---@type Snippet Typeclass
163160
data.cls = s({
164161
trig = 'cls',
165162
dscr = 'Typeclass',
@@ -173,6 +170,7 @@ data.cls = s({
173170
})
174171
table.insert(data.all, data.cls)
175172

173+
---@type Snippet Typeclass instance
176174
data.ins = s({
177175
trig = 'ins',
178176
dscr = 'Typeclass instance',
@@ -188,6 +186,7 @@ data.ins = s({
188186
})
189187
table.insert(data.all, data.ins)
190188

189+
---@type Snippet Typeclass constraint
191190
data.constraint = s({
192191
trig = '=>',
193192
descr = 'Typeclass constraint',

lua/haskell-snippets/expressions.lua

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,8 @@
55
---@brief ]]
66

77
---@class ExpressionSnippetCollection
8-
---@field if_expr Snippet if expression
9-
---@field if_expr_multiline Snippet if expression (multi-line)
10-
---@field if_expr_multiway Snippet if expression (multi-way)
11-
---@field case Snippet case expression (pattern match)
12-
---@field lambdacase Snippet lambda case (pattern match)
13-
14-
---@type ExpressionSnippetCollection
158
local expressions = {
9+
---@type Snippet[] All expression-related snippets
1610
all = {},
1711
}
1812

@@ -24,6 +18,7 @@ local text = ls.text_node
2418
local insert = ls.insert_node
2519
local dynamic = ls.dynamic_node
2620

21+
---@type Snippet if expression
2722
expressions.if_expr = s({
2823
trig = 'if',
2924
dscr = 'If expression (single line)',
@@ -37,6 +32,7 @@ expressions.if_expr = s({
3732
})
3833
table.insert(expressions.all, expressions.if_expr)
3934

35+
---@type Snippet if expression (multi-line)
4036
expressions.if_expr_multiline = s({
4137
trig = 'iff',
4238
dscr = 'If expression (multi lines)',
@@ -50,6 +46,7 @@ expressions.if_expr_multiline = s({
5046
})
5147
table.insert(expressions.all, expressions.if_expr_multiline)
5248

49+
---@type Snippet if expression (multi-way)
5350
expressions.if_expr_multiway = s({
5451
trig = 'ifmw',
5552
dscr = 'If expression (multi-way)',
@@ -68,6 +65,7 @@ expressions.if_expr_multiway = s({
6865
})
6966
table.insert(expressions.all, expressions.if_expr_multiway)
7067

68+
---@type Snippet case expression (pattern match)
7169
expressions.case = s({
7270
trig = 'case',
7371
dscr = 'Case expression (pattern match)',
@@ -84,6 +82,7 @@ expressions.case = s({
8482
})
8583
table.insert(expressions.all, expressions.case)
8684

85+
---@type Snippet lambda case (pattern match)
8786
expressions.lambdacase = s({
8887
trig = '\\case',
8988
dscr = 'Lambda (pattern match)',

0 commit comments

Comments
 (0)