Skip to content

Commit

Permalink
issue 408: cubicle theme missing sublimehaskell.marker scopes
Browse files Browse the repository at this point in the history
Add the 'sublimehaskell.marker.*' scopes to the Cubicle color theme.
Resolves issue 408.
  • Loading branch information
B. Scott Michel committed Feb 21, 2018
1 parent 54c5977 commit ba7cb54
Show file tree
Hide file tree
Showing 4 changed files with 648 additions and 285 deletions.
239 changes: 239 additions & 0 deletions Messages/2.1.26.md
@@ -0,0 +1,239 @@
*SublimeHaskell* 2.1.26
=======================

SublimeHaskell 2.1.x is a release tree for minor enhancements and fixes to newly identified (and resolved) issues.

__RESTART SublimeText AFTER THIS UPDATE!!__<br>
__RESTART SublimeText AFTER THIS UPDATE!!__<br>
__RESTART SublimeText AFTER THIS UPDATE!!__<br>

This ensures that stale versions of internal *SublimeHaskell* Python modules don't cause problems when *PackageControl* reloads the plugin. *SublimeHaskell* does not (and cannot) forcibly reload its own internal modules and has no control over how *PackageControl* reloads a plugin.

## Coming Soon to SublimeHaskell

_ _ ___ _____
| |__ ___ __| | _____ __ / _ \ |___ /
| '_ \/ __|/ _` |/ _ \ \ / / | | | | |_ \
| | | \__ \ (_| | __/\ V / | |_| | ___) |
|_| |_|___/\__,_|\___| \_/ \___(_)____/

When `hsdev 0.3` testing is complete (likely in the next 2-3 weeks) and Issue 399 is closed, you will have to *upgrade `hsdev` to the current 0.3 version*.

## In The Meantime... `hsdev 0.3.0.1`: Do Not Use

Recently, `hsdev 0.3.0.1` was released, . If you installed `hsdev` since New Year's 2018, either via `cabal` or `stack`

cabal install hsdev

or

stack install hsdev

then type the following at your shell or command window's prompt:

hsdev version

If the version number does not start with `0.2`, you inadvertently installed an incompatible version. Version `0.3.0.1` support will be released soon, pending testing.

To install the `0.2` series version that is compatible with _SublimeHaskell_:

cabal install hsdev-0.2.5.1

If you try:

stack install hsdev-0.2.5.1

`stack` will complain about `haddock-api` and `hdocs` incompatibilities (the `stack.yaml` file probably needs updating.) Stick with `cabal install` for the time being.


## In this release...

**Issue 408**: Add the 'sublimehaskell.marker' scopes to the Cubicle theme.

## 2.1.25

**Issue 407**: Check/lint and prettify-on-save broken for two reasons. First, _SublimeText_ stores persistent metadata about a file's view, which stored the old "improved" syntax file's name. Consequently the check for Haskell source would fail. Second, ST3 Build 3157 changed the event listener API once again, breaking post-save command actions.

**Issue 404**: _SublimeREPL_'s "external id" is used for both the view's name *and* for the name of a persistent history file. Translate any illegal Windows file name characters to underscores and dashes ("\_" and "-").

## 2.1.24

**Issue 401**: Fix traceback in `check_lint.py`.

## 2.1.23

**Issue 395**: _SublimeHaskell_ will now pop up a message dialog if you installed a version of `hsdev` that is incompatible (see the notes above about `hsdev 0.3.x.y` incompatibility.) You will also get a message dialog if you have a backend configuration that cannot execute or find the `hsdev` executable.

**Haskell (improved) syntax highlighting**: Automagically converted the _SublimeText 2_ syntax definitions to the newer _SublimeText 3_ `YAML` format. There shouldn't be any noticeable changes to highlighting (except for Issue 387, below.) In other words, this should be no worse than what existed versions prior to `2.1.23`. Hopefully. With fingers crossed.

The previous "improved" syntax highlighting is still accessible. To use that syntax highlighter, look for _SublimeHaskell_ syntaxes that start with "_ST2_".

**Issue 387**: Underscores in numeric literals are now recognized, as are hexadecimal floating point literals (@iamrecursion should be beaming now.) You can now write:

upperAddr :: Int
upperAddr = 0x_7fff_ffff

Note: Just because you can write this in your code doesn't mean that the GHC compiler will accept it.

## 2.1.22

**ghc-mod error messages**: Error messages generated by `ghc-mod` are now just logged to a project-specific panel. These messages have nothing to do with the success or failure of commands sent to `ghc-mod`; they are just the error output from `ghc-mod`. The panel will show itself when `ghc-mod` is started for a project directory. It can be closed to preserve screen real estate.

**Project selection list for multi-project builds**: This selection list was broken. If you have multiple projects within a directory, `hsdev` will detect them. When you use _SublimeHaskell_ `build`, you will be prompted for which project to build.

**Parsing multiple error messages from GHC's output**: Fixed the regular expression that collects error messages generated by `GHC`. It needed a negative lookahead to detect the next error message's start.

**Pull request 393**: Rename the improved Haskell syntax "Haskell (improved)" to better distinguish it from the ordinary Haskell syntax highlighting scheme.

## 2.1.21

**Issue 394**: Fix a bad merge from the `hsdev-3` branch. Check/lint and fly mode should now work correctly, without spurious messages.

## 2.1.20

**Issue 396**: Arrange for the code prettifier to execute after a successful build-on-save (i.e., `enable_auto_build` is `true`).

## 2.1.19

**hsdev backend cleanups**: Pre-emptive cleanups to the `hsdev` backend to prevent request processing deadlocks across threads. Also ensure that post-save processing occurs inside the UI thread.

## 2.1.18

**Check/Lint is asynchronous again**: By popular demand, post-save check/lint is now asynchronous again. Tested with the _none_ and _ghc-mod_ backends to ensure that indenter runs as expected (and, yes, really, it does.)

**Pull #378**: `GHCI Repl` command should always be available/visible.

## 2.1.17

**Issue 390**: Inadvertantly reversed parameters produced the incorrect file names when parsing `build` output, which disabled the ability to click on the error report's file name, line and column.

## 2.1.16

**Issue 380**: Make the "None" and "ghc-mod" backends play nicely with build/check/lint.

## 2.1.15

**Issue 384**: Identified the circumstances under which the `stylish` and `hindent` commands were disabled, when trying to prettify a "lone" file (Haskell source that isn't part of a `cabal` project).

## 2.1.14

**Issues 380, 384**: Make the indenter code simple, dumb and unsophisticated. Do not subclass off `sublime_plugin` classes, since this does not appear to work. Should resolve most of, hopefully, all of, issues related to indenters prettifying-on-save. (Does not stop output window flicker reported in issue 383.)

**Issues 381, 382**: Minimize the quantity of files and databases scanned on each re-inspection pass, e.g., after a save or fly check. Found stale data being carried from inspection pass to inspection pass; ensure that the data is deleted properly.

**Fly check**: Refactor the way fly check mode waits for a check to complete, without using class variables in other modules. Less hacky solution.

## 2.1.12

**Fly mode break-fix**: Propagate a class rename in the `check_lint` module to `fly_check`.

## 2.1.11

**Indent-on-save**: Should be fixed (again).

**Refactored `hsdev` backend communication**: While fixing *indent-on-save*, discovered a few quirks in `hsdev` backend communication.

## Combined 2.1.0 - 2.1.10 changes

- Fix a traceback in `HsDevBackend.files_and_contents`; `None` is usually passed in as a default, not an empty dictionary.

- Revert some `sublime_plugin.ViewEventListener` refactoring, since the API was only recently "enhanced" (Build 3155 -- most users are on Build 3146.)

**Fly mode**: Checking or linting after a pause in typing, aka "fly mode", now works reliably again. To enable, add the following to your user settings:

"lint_check_fly": true

You can control the idle time that _SublimeHaskell_ waits before initiating checking or linting via the `lint_check_fly_idle ` setting. The default is 5 seconds. You should not set this to a value lower than 3 seconds or checks/lints can occur faster than you can type (although there is nothing to stop you from doing so in the code. Yet.)

**Issue 374 (enhancement)**: Limiting the error, warning and hints displayed in the _Sublime Haskell Output Window_ after a check, lint or build is now supported via the `show_only` setting:

"show_only": {
"errors": true,
"warnings": true,
"hints": true
},

The `show_only` setting can be customized as _SublimeHaskell_ project setting, i.e., from within a `.sublime-project` file:

{
"folders":
[
{
"path": "."
}
],
"SublimeHaskell":
{
"show_only": {
"errors": true,
"warnings": true,
"hints": true
},
}
}

**Issue 365**: Rethink how plugin preferences are stored in the `SettingsContainer` object; use Python properties instead of being clever with instance attributes. Property setters allow validity testing when new preference values are read.

**Issue 377 (possible 373, 359)**: @coodoo noticed a `UnicodeDecodeError` traceback after saves, which turns out to be a short read from the backend's socket -- more data is available, which SublimeHaskell should continue to read in order to ensure that decode('utf-8') succeeds. The fix here is to continue reading from the socket if decode('utf-8') raises the UnicodeDecodeError exception. If no exception is raised, then split and process what looks like a complete request.

This probably also fixes issues 373 and 359, which manifested similar behavior, but without the traceback.

**Issues 375, 376 (duplicate)**: Make the "local", "exec-with" and "install-dir" `hsdev` backend options work together properly. If, for some reason, a backend has "local" set but either "exec-with" or "install-dir" isn't set, SublimeHaskell should not generate a backtrace. It should just mark the particular backend as unusable and continue onward.

**Fix REPL support**: REPL support was supported solely via `cabal repl` and the code supporting Haskell REPLs itself needed re-evaluation. All execution wrappers are now supported: `cabal repl`, `cabal new-repl` and `stack repl`.

*NOTE: The `haskell_build_tool` setting determines which execution wrapper is used. `haskell_build_tool` can be a project-specific setting, not just a default or user preference. See below in Release 2.1.3.*

**Fix status line issues**: There was a long standing bug with SublimeHaskell's use and manipulation of the status line. The main manifestation was a thread that repeatedly updated the status line every 0.2 seconds -- it wasn't always perceivable because there wasn't any noticeable flicker. This fix should cut down in CPU and thread usage that this issue may have caused.

**'SublimeHaskell: Reinspect All' now asynchronous**: This command now does its work asynchronously. Previously, it did its work in the SublimeText UI thread, leading to perceived hangs.

**Issue 371**: Revert a spurious change to a `hsdev` backend method (that was supposed to be reverted.)

**SublimeHaskell: Run**: Make running project executables play nicely with execution wrappers (e.g., `cabal run`, `stack exec`, `cabal new-run`). Eliminated the 'SublimeHaskell: Stack Exec' item because all of the functionality is included in 'SublimeHaskell: Run'. This change eliminates all of the previous gymnastics required to locate the executable in the first place.

`SublimeHaskell: Run` will also prompt for command line arguments, which are parsed into a Python list by the `shlex` package. Arguments will persist across command invocations and Sublime Text sessions.

**Issue 365**: More linting on the `prettify_exectable` setting. Someday, we'll know where the "{0}" comes from.

**Issue 361**: Add `cabal new-test` support in the `SublimeHaskell: Test` command. Restored automatic testing after a successful build; automatic benchmarking is also possible after a successful build. See **auto_build_mode** note below.

**Issue 344**: Most, if not all, 'cabal new-*' commands should be available, including `new-freeze` and `new-bench`. Corresponding commands for regular `cabal` and `stack` (as applicable) implemented. The major hack is that `cabal-new-build` does not have a clean command, so this is implemented as a function inside the SublimeHaskell builder.

**auto_build_mode change**: The `auto_run_tests` setting is now deprecated. Its functionality is now replaced by two new build modes: *normal-then-test* (run tests after a successful build) and *normal-then-bench* (run benchmarks after a successful build.) SublimeHaskell will pop up an information dialog if `auto_run_tests` is in your preferences.

**Project Settings**: All SublimeHaskell-related project settings are now contained within the `SublimeHaskell` dictionary. This allows you to encapsulate certain settings, like `haskell_build_tool`, on a per-project basis instead of via user preferences. There is more information at the bottom of the `SublimeHaskell.sublime-settings` (default plugin settings) file.

{
"folders":
[
{
"path": "."
}
],
"SublimeHaskell": {
"haskell_build_tool": "cabal-new-build"
}
}

**build.py**: Code cleanups related to building Haskell applications, mostly related to better class structure, fewer global variables. (Related to issues 361 and 344.)

**`pylint` cleanups**: `pylint` has updated, lots of new warnings. Fix code to bring them down to a dull roar.

**Issue 366**: Word and default completions did not produce results, which became apparent while using the "none" backend. Removed the `inhibit_completions` setting because its purpose was confusing. Added two new settings, `add_word_completions` and `add_default_completions`. `add_word_completions` adds words in the source file that are more than three characters; this is a SublimeText feature that SublimeHaskell normally inhibits. `add_default_completions` adds the contents of the `Haskell.sublime-completions` file, which SublimeHaskell normally inhibits as well. Both settings default to `false`. (H/T to @Pastafarianist.)

**ghc-mod**: Completions now work again, modeled off the `ghc-mod/elisp/ghc-comp.el` code. It's not perfect, but it suffices to improve developer productivity.

**Issue 365 (partial)**: Fix dignostic message when SublimeHaskell doesn't accept the `prettify_executable` setting's value.

**Issue 364**: `SublimeHaskell: Test` actually invoked the `install` task, not the `test` task. Also added `SublimeHaskell - Test` to the "Build With..." menu. Issue fixed.

**Issue 352**: Add command line options for `stylish-haskell` and `hindent`. NOTE: These are lists, not strings.

## Upcoming Development Milestones

Upcoming development milestones, listed in order of priority:

### The SublimeHaskell Editing Guide (Ongoing)

Documentation is always a good thing. The guide is a work-in-progress.
92 changes: 92 additions & 0 deletions Themes/Cubicle.YAML-tmTheme
@@ -0,0 +1,92 @@
%YAML 1.2
---
name: Cubicle
settings:
- settings: {
activeGuide: '#9D550FB0',
background: '#FFFFFF',
bracketContentsForeground: '#F8F8F2A5',
bracketContentsOptions: underline,
bracketsForeground: '#F8F8F2A5',
bracketsOptions: underline,
caret: '#000000',
findHighlight: '#FFE792',
findHighlightForeground: '#000000',
foreground: '#000000',
highlight: '#4B0082',
invisibles: '#3B3A32',
lineHighlight: '#CCCCCC',
selection: '#ADD6FF',
selectionBorder: '#FFFFFF00',
tagsOptions: stippled_underline
}
- name: Comment
scope: comment
settings: {foreground: '#008800'}
- name: String
scope: string
settings: {foreground: '#A31515'}
- name: Number
scope: constant.numeric
settings: {foreground: '#A31515'}
- name: Built-in constant
scope: constant.language
settings: {foreground: '#A31515'}
- name: User-defined constant
scope: constant.character, constant.other
settings: {foreground: '#2B91AF'}
- name: Variable
scope: variable
settings: {fontStyle: ''}
- name: Keyword
scope: keyword
settings: {foreground: '#0000FF'}
- name: Storage
scope: storage
settings: {fontStyle: '', foreground: '#0000FF'}
- name: Storage type
scope: storage.type
settings: {foreground: '#2B91AF'}
- name: Class name
scope: entity.name.class
settings: {fontStyle: underline, foreground: '#2B91AF'}
- name: Inherited class
scope: entity.other.inherited-class
settings: {foreground: '#2B91AF'}
- name: Function name
scope: entity.name.function
settings: {fontStyle: '', foreground: '#000000'}
- name: Function argument
scope: variable.parameter
settings: {foreground: '#000000'}
- name: Library function
scope: support.function
settings: {fontStyle: '', foreground: '#000000'}
- name: Library constant
scope: support.constant
settings: {fontStyle: '', foreground: '#A31515'}
- name: Library class/type
scope: support.type, support.class
settings: {foreground: '#2B91AF'}
- name: Library variable
scope: support.other.variable
settings: {fontStyle: ''}
- name: Invalid
scope: invalid
settings: {background: '#FF0000', foreground: '#000000'}
- name: Invalid warning
scope: invalid.warning
settings: {background: '#008800', foreground: '#000000'}
- name: Invalid deprecated
scope: invalid.deprecated
settings: {background: '#FF0000', foreground: '#000000'}
- name: Mark error
scope: sublimehaskell.mark.error
settings: {foreground: '#d80027'}
- name: Mark warning
scope: sublimehaskell.mark.warning
settings: {foreground: '#ffda44'}
- name: Mark hint
scope: sublimehaskell.mark.hint
settings: {foreground: '#91dc5a'}
uuid: 3795D3D0-64BA-11E1-8D3B-ECD74824019B

0 comments on commit ba7cb54

Please sign in to comment.