-
-
Notifications
You must be signed in to change notification settings - Fork 302
/
CHANGELOG.md
555 lines (351 loc) · 19.1 KB
/
CHANGELOG.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
## Links:
https://margo.sh/donate - Help support future development of GoSublime.
https://margo.sh/b/hello-margo - A short introduction to margo.
https://margo.sh/b/motd - Get notified when GoSublime has a new release.
---
## Changes
## 20.06.14
This release contains a number of features and bug fixes that have been worked on over the last few months.
_You will need to restart Sublime Text for all changes to take effect_
- Add new GoCmd{} option `Humanize` to make `go test` and `go re/play` (in test mdoe) output more readable (using https://github.com/dustin/go-humanize).
- large numbers are split up using commas
- 123456 ns/op is converted to µs/op, etc.
- 123456 B/op is converted to KiB/op, etc.
To enabled it, use:
&golang.GoCmd{
Humanize: true,
}
e.g. output:
goos: linux
goarch: amd64
pkg: margo.sh/vfs
BenchmarkPoke/Miss-8 388,868 2.952 µs/op
BenchmarkPoke/Hit-8 1,739,704 684 ns/op
PASS
Known bugs:
- The output fields are not aligned
- Add new reducer golang.GoGenerate
It adds a UserCmd (cord `ctrl/cmd+.`,`ctrl/cmd+.c`) named `Go Generate` that calls `go generate` in the closest go package (current dir or parent dirs).
It can be enabled with:
&golang.GoGenerate{
Args: []string{"-v", "-x"},
},
- Auto-completion now works when the line ends with a dot (.)
- Add new reducer golang.AsmFmt
It does code fmt'ing for `.s` files using https://github.com/klauspost/asmfmt
It formats `.s` files when they are saved, or the fmt cord `ctrl+.`,`ctrl.f` is pressed.
- Add new reducer &web.Prettier{}
It does code fmt'ing using https://github.com/prettier/prettier
By default It fmt's CSS, HTML, JS, JSON, JSX, SVG, TS, TSX and XML files.
To specify the list of langs to fmt set the `Langs` field:
&web.Prettier{
// Langs: []mg.Lang{mg.JS}, // only fmt .js files
Langs: web.PrettierDefaultLangs,
},
You might also need to `import "margo.sh/web"`.
You will need to install prettier separately.
- Add new Lang constants: mg.HTML, mg.SVG and mg.XML
- Add mgutil.SplitWriter a writer that writes to an underlying writer in split chunks e.g. lines somewhat similar to bufio.scanner
- `go.play` and `go.replay` (cord `ctrl/cmd+.`,`ctrl/cmd+r`) now works in in unsaved `_test.go` files.
- `go.replay` now runs the Benchmark\* func surrounding the cursor.
Compared to `ctrl/cmd+shift+left-click`, it also runs tests.
Known bugs:
- It currently ignores the TestArgs and BenchmarkArgs options of the golang.TestCmds reducer.
- mg.CmdCtx supports a new option `Verbose`,
When `cx.Verbose = true`the commands that are run are printed to the output prefixed with `#`.
e.g. output:
[ `replay` | done ]
# go test -test.run=. -test.bench=^BenchmarkPoke$
goos: linux
[...]
It's enabled for `go.play` and `go.replay` (cord `ctrl/cmd+.`,`ctrl/cmd+r`).
- Issues without a valid tag are now defaulted to `mg.Error` instead of being ignored.
This fixes some cases where the error palette shows errors, but the status and HUD doesn't.
- Fix some cases where issues are reported in the wrong file or incorrectly anchored to the current file.
- goutil.IsPkgDir() and other functions now use the VFS, so should touch the disk less.
## 20.03.09
This release fixes a couple bugs:
- GO111MODULE=off is set after building, in cases where GO111MODULE wasn't already set by the user.
- An update message is shown even when the local GoSublime version is greater than that reported by the server.
## 20.03.01
This release fixes a margo build failure when upgrading to go1.14.
## 20.02.01
This release focuses on fixing a performance issue due to a failure to resetting all cached data prematurely.
- Cache some files in memory to avoid re-reading from disk every time.
- The `&nodejs.PackageScripts{}` reducer now uses `yarn` instead of `npm` if the `yarn.lock` file is present.
## 20.01.01
This release mainly focuses on under-the-hood improvements for module support.
- The default auto-completion import mode has been changed to `Kim-Porter`, our solution for auto-completion and package/module going forward.
One side-effect of this change is that unimported-packages support is less reliable but we feel this is a small drawback when compared to the much improved auto-completion support.
We plan to remove support for switching import modes in the future, but if you would like to revert to the previous default (bearing in mind auto-completion might stop working), configure the `MarGocodeCtl` reducer as follows:
```go
&golang.MarGocodeCtl{
ImporterMode: golang.SrcImporterWithFallback,
}
```
- The Go/TypeCheck linter is now more complete and should be able to type-check (without failure) all packages for which auto-completion is available.
This linter offers typechecking (like the gotype tool) but can work on unsaved files and while you type and is faster a full `go install` lint.
To enable add the following reducer to your `margo.go` file:
```go
&golang.TypeCheck{},
```
- Some HTTP handler snippets have been added and are offered in files that `import "net/http"`.
## 19.10.22
- API BREAKAGE:
ParseWithMode and ParseWithMode now takes a `*mg.Ctx` instead of a `mg.KVStore`.
- Add experimental support for auto-completion and type-checking in go modules.
- Add experimental reducer `&golang.TypeCheck{}`.
It's a linter that does a full type-check as you type (even in unsaved files).
It can be thought of as a replacement for the `gotype` binary of old.
NOTE: This is purely an experiment used primarily for testing the package importer
and type-checking and will probably break randomly, if it works at all.
With that said, the plan is to clean it up and develop it further in the future.
- The Ariana color scheme has been tweaked to improve readability.
- Add a `‣` prefix to status items and reduce the space between them.
- Add langs `mg.GoMod` and `mg.GoSum` for `go.mod` and `go.sum` files, respectively.
For convenience, `goutil.Langs` now holds the list of all Go-related langs
and Go linters are now available in `go.mod` and `go.sum`.
- The tasks count styled has been changed to `Tasks ➊➋➌`.
The status animates between `Tasks ➊➋➌` and `Tasks ➀➁➂` while there are tasks less than 16s old.
- The issue count styled has been changed to `Error ➊ꞏ🄋`.
NOTE: The meanings of the numbers have been reverted.
Previously, given `1/2 Errors`, there was 1 issue with tag `Error` in this view, and there was a total 2 errors in all views.
The new meanings `Error ➊ꞏ🄋` is: ➊ is the number issues in the current view and 🄋 is the number issues in other views.
Only first number is highlighted if there are issues in the current view.
Likewise, when there are issues, but none in the current view, only the second number is highlighted.
- Don't show the `func` prefix in the calltip status. The parens already make it obviously a function.
## 19.06.16
- Fix a deadlock/freeze (seen on Mac OS) when starting up with multiple windows open.
- Fix an issue where the active window loses focus when starting up.
## 18.11.28
This release introduces the HUD and comes with many improvements to snippets and a tweaked version of the Mariana color schemed named Ariana.
- The HUD is an output panel that's automatically populated with info traditionally found in the status bar and various pop-ups/tool-tips.
Currently, the following info will be displayed there:
- The `Issues` status, including the error messages for the current line.
- The `GocodeCalltips` status, including positional highlighting of params and return statement.
It's bound to the keys `ctrl+.`,`ctrl+0`.
You can manually bind it to another key. e.g. via `Preferences > Key Bindings`:
```json
{
"keys": ["ctrl+0"],
"command": "margo_show_hud",
},
```
- Several new snippets have been added and old ones improved.
- AppendSnippet: `name = |` suggests:
- `name = append(name, ...)`
- `slice = append(slice[:len(slice):len(slice)], ...)`
- DeferSnippet:
- `defer func() {}()`
- `defer f()`
- ReturnSnippet:
- `return`
- MutexSnippet: `mu.|` suggests:
- `mu.Lock(); defer mu.Unlock(); |`
- `mu.Lock(); |; mu.Unlock()`
- PackageNameSnippet:
- `package main; func main() { | }`
- DocSnippet: suggest function names, field names, etc. inside the corresponding _documentation_ comment
- Fix the golang.Gocode{} reducer changing View.Pos
- The `(Add)UnimportedPackages` feature no longer adds circular imports
- Show the tasks animation after 500ms instead of 1s to (hopefully) make things feel more responsive
- GOROOT and GOPATH are scanned in parallel at startup
- All packages in GOROOT and GOPATH are available for the unimported packages feature, not just those in GOROOT and the package cache.
- Add better named alias `pkg-list` for `unimported-packages` and show the directory where the package is
- API BREAKAGE:
Most users should not be affected, but there were some API changes/breakages.
- removed CursorScope.Any and CursorScope.All
- make CursorCtx.Pos the int offset instead of token.Pos
- `CursorNode` and `ParseCursorNode` were removed
- `CursorCtx.Ctx` is no longer embedded
## 18.11.06
- Fix `UnimportedPackages` support for stdlib packages in go1.10 and earlier versions.
## 18.11.04
- API BREAKAGE: Rename `mg.Reducer.Reducer*` to `mg.Reducer.R*`.
Most users should be unaffected.
If you've _called_ any of these methods _directly_,
you will need to rename the following method calls:
- ReducerLabel -> RLabel
- ReducerInit -> RInit
- ReducerConfig -> RConfig
- ReducerCond -> RCond
- ReducerMount -> RMount
- Reducerduce -> Rduce
- ReducerUnmount -> RUnmount
- API BREAKAGE: mg.RunCmdData has been un-exported
- The following fields in the `&golang.GoCode{}` and `&golang.GocodeCalltips{}` reducers are now ignored.
- Source: this is now the default
- ProposeBuiltins: this is now the default
- ProposeTests: use `&golang.MarGocodeCtl{}`
- Autobuild: we now use the source code so there are no plans to implement this
- UnimportedPackages: this is now the default
See `&golang.MarGocodeCtl{}` (below).
- Add support for 'unimported' packages.
- auto-completing `json.` will now try to import `encoding/json`
- known bugs: when adding the import, the view will scroll
- known limitation: we don't scan GOPATH and we don't support the vendor directory
Use `NoUnimportedPackages` (below) to disable this.
- Add support for preloading imported packages when a view is activated.
- This aims to keep the cache warm to speed up auto-completion.
Use `NoPreloading` (below) to disable this.
* Add support for adding `unimported` packages to the file.
- Use `AddUnimportedPackages` (below) to enabled this
* All the above can be configured using the `&golang.MarGocodeCtl{}` reducer
```Go
&golang.MarGocodeCtl{
// whether or not to include Test*, Benchmark* and Example* functions in the auto-completion list
// gs: this replaces the `autocomplete_tests` setting
ProposeTests: false,
// Don't try to automatically import packages when auto-compeltion fails
// e.g. when `json.` is typed, if auto-complete fails
// "encoding/json" is imported and auto-complete attempted on that package instead
// See AddUnimportedPackages
NoUnimportedPackages: false,
// If a package was imported internally for use in auto-completion,
// insert it in the source code
// See NoUnimportedPackages
// e.g. after `json.` is typed, `import "encoding/json"` added to the code
AddUnimportedPackages: false,
// Don't preload packages to speed up auto-completion, etc.
NoPreloading: false,
// Don't suggest builtin types and functions
// gs: this replaces the `autocomplete_builtins` setting
NoBuiltins: false,
},
```
* Add new lang conststants for `mg.JSX`, `mg.TS`, `mg.TSX` and rename `R` to `Rlang`
* Don't treat an empty non-nil slice as matching in `LangIs()` and `ActionIs()`
* Fix an infinite loop when auto-completing inside packages with cyclic dependencies
## 18.10.06
- restore support for running individual test functions by pressing `ctrl+.`,`ctrl+g` or `ctrl+shift + left/right-click` on the function declaration's name
- add support for having multiple builtins with the same name
- API breakage:
`mg.ExecRunFunc()` was replaced with the pattern `CmdCtx.WithCmd().Run()`
the former bypasses builtins so running `go install` has no linting support
## 18.09.30
- Improve autocompletion scope detection
- snippets should now the shown when there is a comment above the package statement
- completion should no longer be shown when there is no package statement
- misc tweaks to the method snippets
- for pointer method receivers, only the `*` is selected for the initial method definition
- when there are syntax errors in the file, methods should no longer be suggested for the invalid type `_`
## 18.09.25
- Switch golang.Gocode and golang.GocodeCalltips to new mode SrcImporterWithFallback by default
This should improve the experience a lot:
- in the old `Source: true` mode, CGO packages often failed
- in the old `Source: false` mode, you had to make sure the package was installed
and up-to-date
- in this new mode, we try the more reliable source mode and fallback
to the binary mode if it fails
As a result, the `Source: bool` fields are now ignored.
To restore the old behaviour, use the golang.MarGocodeCtl reducer:
```Go
&golang.MarGocodeCtl{
ImporterMode: golang.SrcImporterOnly,
// or
ImporterMode: golang.BinImporterOnly,
}
```
- replace margocodectl `cache-list-by-key` and `cache-list-by-dur` with `cache-list`
see `margocodectl cache-list --help`
- Improve FmtCmd's error message
When goimports fails due to a syntax error, the parse error should now be shown as well
and not just the meaningless `exit 2` error message
## 18.09.18
- fix a case where margo exits due to IPC shutdown
_you will need to restart Sublime Text_
- return all possible completions in gocode to allow the editor to do filtering.
this restores the old behaviour where typing `abc.X` proposes `abc.XYX123`
## 18.09.14
- This release adds a new experimental update notifier.
MOTD keeps you updated about new versions and important announcements
It adds a new command `motd.sync` available via the UserCmd palette as `Sync MOTD`
`Interval` can be set in order to enable automatic update fetching.
When new updates are found, it displays the message in the status bar
e.g. `★ margo.sh/cl/18.09.14 ★` a url where you see the upcoming changes before updating
It sends the following data to the url https://api.margo.sh/motd.json:
- current editor plugin name e.g. `?client=gosublime`
this tells us which editor plugin's changelog to check
- current editor plugin version e.g. `?tag=r18.09.14-1`
this allows us to determine if there any updates
- whether or not this is the first request of the day e.g. `?firstHit=1`
this allows us to get an estimated count of active users without storing
any personally identifiable data
No other data is sent. For more info contact privacy at kuroku.io
To enabled it, add the following reducer:
```Go
&mg.MOTD{
// Interval, if set, specifies how often to automatically fetch messages from Endpoint
// Interval: 3600e9, // automatically fetch updates every hour
},
```
You will need to restart Sublime Text.
Unless you uncomment/set `Interval`, you will need to manually check for updates
using the `Sync MOTD` command from the usercmd palette
`ctrl+.`,`ctrl+c` / `super+.`,`super+c`
- The `GoSublime: Go` syntax was switched to a new syntax based on the Go syntax shipped in Sublime Text
- if you find any breakages, please file an issue at margo.sh/gs/i
- if you prefer the colouring of the previous version, you can switch back to the old syntax
via `Menu > View > Syntax > Open all with current extension as... > GoSublime > GoSublime: Go (Deprecated)`
please not that this version is buggy and will not receive any fixes
- golang.Gocode, golang.GocodeCalltips:
- reduce memory use with `Source: true`
- support syscall/js
- golang.Guru gained support for syscall/js
guru is now called with `-tags "js wasm"` if `syscall/js` is imported in the package
## 18.08.31
- Switch the `ctrl+.`,`ctrl+t` / `cmd+.`,`cmd+t` keybinding to the new &golang.TestCmds{} reducer:
```Go
&golang.TestCmds{
// additional args to add to the command when running tests and examples
TestArgs: []string{},
// additional args to add to the command when running benchmarks
BenchArgs: []string{"-benchmem"},
},
```
## 18.08.29
- implement more aggressive gocode caching.
behind the scenes, imported/type-checked packages are cached until the respective package is edited.
- it should now be ok to use `Source: true` option without slowdowns.
- as a bonus, `go modules` should now have completion with `Source: true`
- please note that `Source: true` uses a lot more memory (see below for details about cache pruning)
- if both &golang.Gocode{Source: true} and &golang.GocodeCalltips{Source: true}
use `Source: true`, they will share the cache (less memory use)
- add new reducer `&golang.MarGocodeCtl{}`
this allows manual cache management using the new `margocodectl` command
- to clear the cache use the command `margocodectl cache-prune`
run `margocodectl` for info about how to use the command
- automated cache pruning will be implemented in the future
## 18.08.22
- merge all shell env vars named `^(MARGO|GO|CGO)\w+` into the GoSublime environment
this ensures new env vars like `GOPROXY` and `GO111MODULE` work correctly
- try to prevent `GO111MODULE` leaking into the agent build process
- add support for UserCmd prompts
this enables the creation of UserCmds like the following, without dedicated support from margo:
```Go
mg.UserCmd{
Title: "GoRename",
Name: "gorename",
Args: []string{"-offset={{.View.Filename}}:#{{.View.Pos}}", "-to={{index .Prompts 0}}"},
Prompts: []string{"New Name"},
}
```
- fix #853 a build failure when using snap packaged go1.10
- fix caching of packages in GOPATH when doing gocode completion
this _might_ slow completion, but there should no longer be any stale non-GOROOT package completions
- add new `Source` option to use source code for gocode completions
_this will most likely be very slow_
```Go
&golang.Gocode{ Source: true }
&golang.GocodeCalltips{ Source: true }
```
## 18.08.15
- fix missing `go` command integration by default
- you may need to add the reducer `&golang.GoCmd{}`
- this adds new commands (callable through 9o):
- `go`: Wrapper around the go command, adding linter support
- `go.play`: Automatically build and run go commands or run go test for packages
with support for linting and unsaved files
- `go.replay`: Wrapper around go.play limited to a single instance
by default this command is bound to `ctrl+.,ctrl+r` or `cmd+.,cmd+r`
UserCmds (`ctrl+.,ctrl+c` / `cmd+.,cmd+c`) are also added for `Go Play` and `Go RePlay`