on f4b1889 help sign in
CHANGELOG.md+4−46
since splitsnapshots
unifiedsplit
@@ -1,51 +1,9 @@
1# Change Log
1# Change Log
2
2
3−### 0.0.12
3+All notable changes to the "ormolu" extension will be documented in this file.
4
4
5−Fixed a bug where executable paths outside of `$PATH` would fail. (@lzszt)
5+Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
6
6
7−### 0.0.11
7+## [Unreleased]
8
8
9−Added the ability to specify the path to the executable.
10−
11−### 0.0.10
12−
13−Fixed off-by-one range bug.
14−
15−### 0.0.9
16−
17−Fixed range values.
18−
19−### 0.0.8
20−
21−Fixed bug.
22−
23−### 0.0.7
24−
25−Fixed bug.
26−
27−### 0.0.6
28−
29−Added proper range support.
30−
31−### 0.0.5
32−
33−Fixed bugs.
34−
35−### 0.0.4
36−
37−Fixed bugs.
38−
39−### 0.0.3
40−
41−Added logo.
42−
43−### 0.0.2
44−
45−Added configurations.
46−
47−Changed error to warning.
48−
49−### 0.0.1
50−
51−Initial release of Ormolu
9+- Initial release
README.md−12
@@ -21,15 +21,3 @@ Initial release of Ormolu
21Added configurations.
21Added configurations.
22
22
23Changed error to warning.
23Changed error to warning.
24−
25−### 0.0.3
26−
27−Added logo.
28−
29−### 0.0.4
30−
31−Fixed bugs.
32−
33−### 0.0.5
34−
35−Fixed bugs.
logo.pngdeleted

Binary file not shown.

package.json+155−161
@@ -1,163 +1,157 @@
1{
1{
2− "name": "ormolu",
2+ "name": "ormolu",
3− "displayName": "Ormolu",
3+ "displayName": "Ormolu",
4− "publisher": "ilyakooo0",
4+ "publisher": "ilyakooo0",
5− "description": "Haskell code formatter with ormolu",
5+ "description": "Haskell code formatter with ormolu",
6− "version": "0.0.12",
6+ "version": "0.0.2",
7− "repository": {
7+ "repository": {
8− "type": "git",
8+ "type": "git",
9− "url": "https://github.com/ilyakooo0/vs-code-ormolu"
9+ "url": "https://github.com/ilyakooo0/vs-code-ormolu"
10− },
10+ },
11− "icon": "logo.png",
12− "engines": {
11+ "engines": {
13− "vscode": "^1.39.0"
12+ "vscode": "^1.39.0"
14− },
13+ },
15− "categories": [
14+ "categories": [
16− "Formatters"
15+ "Formatters"
17− ],
16+ ],
18− "main": "./out/extension.js",
17+ "main": "./out/extension.js",
19− "contributes": {
18+ "contributes": {
20− "languages": [{
19+ "languages": [
20+ {
21− "id": "haskell",
21+ "id": "haskell",
22− "aliases": [
22+ "aliases": [
23− "Haskell"
23+ "Haskell"
24− ]
24+ ]
25+ }
25− }],
26+ ],
26− "configuration": {
27+ "configuration": {
27− "title": "Ormolu",
28+ "title": "Ormolu",
28− "properties": {
29+ "properties": {
29− "ormolu.extensions.AlternativeLayoutRule": {
30+ "ormolu.extensions.AlternativeLayoutRule": {
30− "type": "boolean",
31+ "type": "boolean",
31− "default": false,
32+ "default": false,
32− "description": "Enable the AlternativeLayoutRule extension."
33+ "description": "Enable the AlternativeLayoutRule extension."
33− },
34+ },
34− "ormolu.extensions.AlternativeLayoutRuleTransitional": {
35+ "ormolu.extensions.AlternativeLayoutRuleTransitional": {
35− "type": "boolean",
36+ "type": "boolean",
36− "default": false,
37+ "default": false,
37− "description": "Enable the AlternativeLayoutRuleTransitional extension."
38+ "description": "Enable the AlternativeLayoutRuleTransitional extension."
38− },
39+ },
39− "ormolu.extensions.Arrows": {
40+ "ormolu.extensions.Arrows": {
40− "type": "boolean",
41+ "type": "boolean",
41− "default": false,
42+ "default": false,
42− "description": "Enable the Arrows extension."
43+ "description": "Enable the Arrows extension."
43− },
44+ },
44− "ormolu.extensions.BangPatterns": {
45+ "ormolu.extensions.BangPatterns": {
45− "type": "boolean",
46+ "type": "boolean",
46− "default": false,
47+ "default": false,
47− "description": "Enable the BangPatterns extension."
48+ "description": "Enable the BangPatterns extension."
48− },
49+ },
49− "ormolu.extensions.Cpp": {
50+ "ormolu.extensions.Cpp": {
50− "type": "boolean",
51+ "type": "boolean",
51− "default": false,
52+ "default": false,
52− "description": "Enable the Cpp extension."
53+ "description": "Enable the Cpp extension."
53− },
54+ },
54− "ormolu.extensions.MagicHash": {
55+ "ormolu.extensions.MagicHash": {
55− "type": "boolean",
56+ "type": "boolean",
56− "default": false,
57+ "default": false,
57− "description": "Enable the MagicHash extension."
58+ "description": "Enable the MagicHash extension."
58− },
59+ },
59− "ormolu.extensions.MonadComprehensions": {
60+ "ormolu.extensions.MonadComprehensions": {
60− "type": "boolean",
61+ "type": "boolean",
61− "default": false,
62+ "default": false,
62− "description": "Enable the MonadComprehensions extension."
63+ "description": "Enable the MonadComprehensions extension."
63− },
64+ },
64− "ormolu.extensions.PatternSynonyms": {
65+ "ormolu.extensions.PatternSynonyms": {
65− "type": "boolean",
66+ "type": "boolean",
66− "default": false,
67+ "default": false,
67− "description": "Enable the PatternSynonyms extension."
68+ "description": "Enable the PatternSynonyms extension."
68− },
69+ },
69− "ormolu.extensions.RecursiveDo": {
70+ "ormolu.extensions.RecursiveDo": {
70− "type": "boolean",
71+ "type": "boolean",
71− "default": false,
72+ "default": false,
72− "description": "Enable the RecursiveDo extension."
73+ "description": "Enable the RecursiveDo extension."
73− },
74+ },
74− "ormolu.extensions.StaticPointers": {
75+ "ormolu.extensions.StaticPointers": {
75− "type": "boolean",
76+ "type": "boolean",
76− "default": false,
77+ "default": false,
77− "description": "Enable the StaticPointers extension."
78+ "description": "Enable the StaticPointers extension."
78− },
79+ },
79− "ormolu.extensions.TemplateHaskellQuotes": {
80+ "ormolu.extensions.TemplateHaskellQuotes": {
80− "type": "boolean",
81+ "type": "boolean",
81− "default": false,
82+ "default": false,
82− "description": "Enable the TemplateHaskellQuotes extension."
83+ "description": "Enable the TemplateHaskellQuotes extension."
83− },
84+ },
84− "ormolu.extensions.TransformListComp": {
85+ "ormolu.extensions.TransformListComp": {
85− "type": "boolean",
86+ "type": "boolean",
86− "default": false,
87+ "default": false,
87− "description": "Enable the TransformListComp extension."
88+ "description": "Enable the TransformListComp extension."
88− },
89+ },
89− "ormolu.extensions.TypeApplications": {
90+ "ormolu.extensions.TypeApplications": {
90− "type": "boolean",
91+ "type": "boolean",
91− "default": false,
92+ "default": false,
92− "description": "Enable the TypeApplications extension."
93+ "description": "Enable the TypeApplications extension."
93− },
94+ },
94− "ormolu.extensions.UnboxedSums": {
95+ "ormolu.extensions.UnboxedSums": {
95− "type": "boolean",
96+ "type": "boolean",
96− "default": false,
97+ "default": false,
97− "description": "Enable the UnboxedSums extension."
98+ "description": "Enable the UnboxedSums extension."
98− },
99+ },
99− "ormolu.extensions.UnboxedTuples": {
100+ "ormolu.extensions.UnboxedTuples": {
100− "type": "boolean",
101+ "type": "boolean",
101− "default": false,
102+ "default": false,
102− "description": "Enable the UnboxedTuples extension."
103+ "description": "Enable the UnboxedTuples extension."
103− },
104+ },
104− "ormolu.extensions.UnicodeSyntax": {
105+ "ormolu.extensions.UnicodeSyntax": {
105− "type": "boolean",
106+ "type": "boolean",
106− "default": false,
107+ "default": false,
107− "description": "Enable the UnicodeSyntax extension."
108+ "description": "Enable the UnicodeSyntax extension."
108− },
109+ },
109− "ormolu.tolerateCpp": {
110+ "ormolu.tolerateCpp": {
110− "type": "boolean",
111+ "type": "boolean",
111− "default": false,
112+ "default": false,
112− "description": "Do not fail if CPP pragma is present."
113+ "description": "Do not fail if CPP pragma is present."
113− },
114+ },
114− "ormolu.unsafe": {
115+ "ormolu.unsafe": {
115− "type": "boolean",
116+ "type": "boolean",
116− "default": false,
117+ "default": false,
117− "description": "Run in \"unsafe\" mode. Do formatting faster but without automatic detection of defects."
118+ "description": "Run in \"unsafe\" mode. Do formatting faster but without automatic detection of defects."
118− },
119+ },
119− "ormolu.checkIdempotency": {
120+ "ormolu.checkIdempotency": {
120− "type": "boolean",
121+ "type": "boolean",
121− "default": false,
122+ "default": false,
122− "description": "Fail if formatting is not idempotent."
123+ "description": "Fail if formatting is not idempotent."
123− },
124+ },
124− "ormolu.customArguments": {
125+ "ormolu.customArguments": {
125− "type": [
126+ "type": [
126− "string",
127+ "string",
127− "null"
128+ "null"
128− ],
129+ ],
129− "default": null,
130+ "default": null,
130− "description": "Custom arguments to pass to ormolu."
131+ "description": "Custom arguments to pass to ormolu."
131− },
132− "ormolu.executablePath": {
133− "type": [
134− "string"
135− ],
136− "default": "ormolu",
137− "description": "The path to the ormolu executable to use."
138− }
132+ }
139− }
133+ }
140− }
134+ }
141− },
135+ },
142− "activationEvents": [
136+ "activationEvents": [
143− "onLanguage:haskell"
137+ "onLanguage:haskell"
144− ],
138+ ],
145− "scripts": {
139+ "scripts": {
146− "vscode:prepublish": "yarn run compile",
140+ "vscode:prepublish": "yarn run compile",
147− "compile": "tsc -p ./",
141+ "compile": "tsc -p ./",
148− "watch": "tsc -watch -p ./",
142+ "watch": "tsc -watch -p ./",
149− "pretest": "yarn run compile",
143+ "pretest": "yarn run compile",
150− "test": "node ./out/test/runTest.js"
144+ "test": "node ./out/test/runTest.js"
151− },
145+ },
152− "devDependencies": {
146+ "devDependencies": {
153− "@types/glob": "^7.1.1",
147+ "@types/glob": "^7.1.1",
154− "@types/mocha": "^5.2.6",
148+ "@types/mocha": "^5.2.6",
155− "@types/node": "^10.12.21",
149+ "@types/node": "^10.12.21",
156− "@types/vscode": "^1.39.0",
150+ "@types/vscode": "^1.39.0",
157− "glob": "^7.1.4",
151+ "glob": "^7.1.4",
158− "mocha": "^6.1.4",
152+ "mocha": "^6.1.4",
159− "typescript": "^3.3.1",
153+ "typescript": "^3.3.1",
160− "tslint": "^5.12.1",
154+ "tslint": "^5.12.1",
161− "vscode-test": "^1.2.0"
155+ "vscode-test": "^1.2.0"
162− }
156+ }
163}
157}
src/extension.ts+8−18
@@ -2,7 +2,7 @@
2// Import the module and reference it with the alias vscode in your code below
2// Import the module and reference it with the alias vscode in your code below
3import * as vscode from 'vscode';
3import * as vscode from 'vscode';
4import * as proc from 'child_process';
4import * as proc from 'child_process';
5−import { Range } from 'vscode';
5+import { isNull } from 'util';
6
6
7// this method is called when your extension is activated
7// this method is called when your extension is activated
8// your extension is activated the very first time the command is executed
8// your extension is activated the very first time the command is executed
@@ -15,26 +15,23 @@ export function activate(context: vscode.ExtensionContext) {
15 return [];
15 return [];
16 };
16 };
17
17
18− const cfg = vscode.workspace.getConfiguration("ormolu");
19−
20 try {
18 try {
21− proc.execSync(cfg.executablePath + ' --help');
19+ proc.execSync('ormolu --help');
22 } catch (e) {
20 } catch (e) {
23 return showErrorMessage("Ormolu is not installed", e);
21 return showErrorMessage("Ormolu is not installed", e);
24 }
22 }
25
23
26− let command = cfg.executablePath;
24+ const cfg = vscode.workspace.getConfiguration("ormolu");
27
25
28− command += ` --start-line ${range.start.line + 1} --end-line ${range.end.line + (range.end.character == 0 ? 0 : 1)}`
26+ let command = "ormolu";
29− command += ` --stdin-input-file ${document.fileName}`
30
27
31 for (let [key, value] of Object.entries(cfg.extensions)) {
28 for (let [key, value] of Object.entries(cfg.extensions)) {
32 if (value) {
29 if (value) {
33− command += " -o -X" + key;
30+ command += " -X" + key;
34 }
31 }
35 }
32 }
36
33
37− if (cfg.customArguments !== null) {
34+ if (!isNull(cfg.customArguments)) {
38 command += " " + cfg.customArguments;
35 command += " " + cfg.customArguments;
39 }
36 }
40
37
@@ -50,21 +47,14 @@ export function activate(context: vscode.ExtensionContext) {
50 command += " -c";
47 command += " -c";
51 }
48 }
52
49
53− const text = document.getText();
50+ const text = document.getText(range);
54 let formattedText;
51 let formattedText;
55 try {
52 try {
56 formattedText = proc.execSync(command, { input: text }).toString();
53 formattedText = proc.execSync(command, { input: text }).toString();
57 } catch (e) {
54 } catch (e) {
58 return showErrorMessage('Ormolu failed to format the code', e);
55 return showErrorMessage('Ormolu failed to format the code', e);
59 }
56 }
60−
61− const fullDocumentRange =
62− new Range
63− (document.lineAt(0).range.start
64− , document.lineAt(document.lineCount - 1).range.end
65− );
66−
67− return [vscode.TextEdit.replace(fullDocumentRange, formattedText)];
57+ return [vscode.TextEdit.replace(range, formattedText)];
68 }
58 }
69 });
59 });
70}
60}