Skip to content

Commit 226cbb6

Browse files
authored
Merge pull request #511 from fortran-lang/gnikit/issue465
2 parents a849f96 + cb5deb0 commit 226cbb6

File tree

8 files changed

+208
-6
lines changed

8 files changed

+208
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1111

1212
### Added
1313

14+
- Added `Whats New` page to be displayed upon update of the extension.
1415
- Added `ifx` support Intel's LLVM based compiler `ifx`
1516
- Added ability to rescan for linting include files.
1617
- Added GitHub Actions support for pre-Release builds
19.9 KB
Loading
53.3 KB
Loading

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@
129129
}
130130
],
131131
"configuration": {
132-
"title": "Fortran configuration",
132+
"title": "Fortran",
133133
"properties": {
134134
"fortran.provide.hover": {
135135
"type": "string",
@@ -354,6 +354,11 @@
354354
"category": "Fortran",
355355
"command": "fortran.analysis.rescanLinter",
356356
"title": "Rescan Linter paths"
357+
},
358+
{
359+
"category": "Fortran",
360+
"command": "fortran.analysis.showWhatsNew",
361+
"title": "Show What's New in this Modern Fortran version"
357362
}
358363
],
359364
"menus": {
@@ -369,6 +374,12 @@
369374
"command": "fortran.analysis.rescanLinter",
370375
"title": "Rescan Linter paths",
371376
"when": "!virtualWorkspace && shellExecutionSupported"
377+
},
378+
{
379+
"category": "Fortran",
380+
"command": "fortran.analysis.showWhatsNew",
381+
"title": "Show What's New in this Modern Fortran version",
382+
"when": "!virtualWorkspace && shellExecutionSupported"
372383
}
373384
]
374385
}

src/extension.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
// src/extension.ts
1+
'use strict';
2+
23
import * as vscode from 'vscode';
34
import * as pkg from '../package.json';
5+
import * as path from 'path';
6+
import * as fs from 'fs';
7+
48
import { FortranCompletionProvider } from './features/completion-provider';
59
import { FortranDocumentSymbolProvider } from './features/document-symbol-provider';
610
import { FortranFormattingProvider } from './features/formatting-provider';
@@ -9,6 +13,7 @@ import { FortranHoverProvider } from './features/hover-provider';
913
import { FortranLintingProvider } from './features/linter-provider';
1014
import { EXTENSION_ID, FortranDocumentSelector } from './lib/tools';
1115
import { LoggingService } from './services/logging-service';
16+
import { WhatsNew } from './features/commands';
1217

1318
// Make it global to catch errors when activation fails
1419
const loggingService = new LoggingService();
@@ -87,6 +92,14 @@ export async function activate(context: vscode.ExtensionContext) {
8792
},
8893
})
8994
);
95+
96+
context.subscriptions.push(vscode.commands.registerCommand(WhatsNew, showWhatsNew));
97+
// Upon the very first initialisation create a file to indicate that the release
98+
// notes have been shown and not show them again.
99+
if (!fs.existsSync(path.join(__dirname, 'displayReleaseNotes.txt'))) {
100+
await showWhatsNew();
101+
fs.writeFileSync(path.join(__dirname, 'displayReleaseNotes.txt'), 'false');
102+
}
90103
return context;
91104
}
92105

@@ -127,13 +140,23 @@ function detectDeprecatedOptions() {
127140
vscode.window.showWarningMessage(
128141
`Modern Fortran is not compatible with FORTRAN Intellisense.
129142
Language Server integration is handled in Modern Fortran now.
130-
Please Disable FORTRAN Intellisense.`
143+
Please Disable/Uninstall: FORTRAN Intellisense.`
131144
);
132145
}
133146
if (vscode.extensions.getExtension('ekibun.fortranbreaker')) {
134147
vscode.window
135148
.showWarningMessage(`Modern Fortran is not compatible with Fortran Breakpoint Support.
136149
Breakpoint support is handled natively in Modern Fortran.
137-
Please Disable Fortran Breakpoint Support.`);
150+
Please Disable/Uninstall: Fortran Breakpoint Support.`);
138151
}
152+
if (vscode.extensions.getExtension('Gimly81.fortran')) {
153+
vscode.window.showWarningMessage(`Modern Fortran is not compatible with extension: fortran.
154+
Both extensions provide syntax highlighting for Fortran and should not be used simultaneously.
155+
Please Disable/Uninstall extension: fortran.`);
156+
}
157+
}
158+
159+
async function showWhatsNew() {
160+
const uri = vscode.Uri.file(path.join(__dirname, '../updates/RELEASE_NOTES-v3.0.md'));
161+
vscode.commands.executeCommand('markdown.showPreview', uri);
139162
}

src/features/commands.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44

55
export const RestartLS = 'fortran.analysis.restartLanguageServer';
66
export const RescanLint = 'fortran.analysis.rescanLinter';
7+
export const WhatsNew = 'fortran.analysis.showWhatsNew';

updates/RELEASE_NOTES-v3.0.md

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
# What's New (v3.0) <!-- omit in toc -->
2+
3+
🎉 We have migrated to **The Fortran Programming Language** Organization 🎉!
4+
5+
- [Linting](#linting)
6+
- [Intel OneAPI compilers](#intel-oneapi-compilers)
7+
- [Preprocessor warnings](#preprocessor-warnings)
8+
- [Language Server `fortls`](#language-server-fortls)
9+
- [Multi Workspace and Single file support](#multi-workspace-and-single-file-support)
10+
- [Configuration file watcher](#configuration-file-watcher)
11+
- [Commands](#commands)
12+
- [Debug Hovering](#debug-hovering)
13+
- [Deprecations](#deprecations)
14+
- [Visual Studio Code Extensions](#visual-studio-code-extensions)
15+
- [Visual Studio Code Settings](#visual-studio-code-settings)
16+
- [Other](#other)
17+
18+
## Linting
19+
20+
The linting diagnostics have been improved, with supported being added for
21+
the Intel's compilers, allowing custom compiler root paths and additional
22+
diagnostic messages such as preprocessor warnings.
23+
24+
### Intel OneAPI compilers
25+
26+
Intel compilers are now supported set the following options in settings.json:
27+
28+
```json
29+
{
30+
"fortran.linter.compiler": "ifort",
31+
"fortran.linter.compilerPath": "/path/to/intel/compilers/bin/ifort" // or ifx
32+
}
33+
```
34+
35+
![Intel Linting Diagnostics](../assets/docs/lint-intel-diagnostics.png)
36+
37+
### Preprocessor warnings
38+
39+
Preprocessor warnings and errors are now properly supported during linting
40+
41+
![Linting Diagnostics Preprocessor](../assets/docs/lint-intel-diagnostics-preproc.png)
42+
43+
## Language Server `fortls`
44+
45+
A lot of the higher level features like Hover, Go-To, Peeking definitions and
46+
finding References are provided by Language Servers. _**Modern Fortran**_ now natively
47+
supports the [`fortls`](https://gnikit.github.io/fortls) Language Server.
48+
49+
_**Modern Fortran**_ will prompt you to install `fortls` with `pip` upon initialization if
50+
not detected in your system.
51+
52+
You can select a custom path to a `fortls` installation by setting the setting
53+
54+
```json
55+
{
56+
"fortran.fortls.path": "/path/to/fortls"
57+
}
58+
```
59+
60+
Some options for `fortls` have explicit settings through _**Modern Fortran**_ settings,
61+
like `fortran.fortls.notifyInit` and `fortran.fortls.incrementalSync`. You can
62+
find a complete list of the explicit options in the `Feature Contributions` tab
63+
of the _**Modern Fortran**_ extension.
64+
65+
In case there is no explicit setting for a `fortls` option, you can pass the
66+
option to `fortls` through
67+
68+
```json
69+
{
70+
"fortran.fortls.extraArgs": ["--nthreads=8", "--autocomplete_name_only"]
71+
}
72+
```
73+
74+
For more information about `fortls` configuration options see the
75+
[`fortls` Documentation](https://gnikit.github.io/fortls/configuration.html)
76+
77+
### Multi Workspace and Single file support
78+
79+
It is now possible to have Language Server support with `fortls` for multiple
80+
workspaces and single files. Simply open a standalone Fortran file and `fortls` or add a
81+
folder to the workspace.
82+
83+
### Configuration file watcher
84+
85+
There are 2 ways of passing options to `fortls` either through the VS Code
86+
`settings.json` or through the `fortls` configuration file.
87+
`fortls` is listening for changes on both types of files and will pass them to the server
88+
without having to restart.
89+
90+
> Warning: This feature is experimental if changes do not take effect you
91+
> can always restart `fortls` through the Command Palette.
92+
93+
## Commands
94+
95+
Two convenience commands have been added, accessible from the Command Palette with
96+
the prefix `Fortran:`
97+
98+
- Fortran: Restart the Fortran Language Server
99+
- Fortran: Rescan Linter paths
100+
101+
## Debug Hovering
102+
103+
Debugging functionality was previously limited when it came to nested
104+
user-defined types and hovering. This issue has been resolved and full
105+
information about an object can be shown in the hover messages while debugging.
106+
107+
![Debugging Hover](../assets/gif/gdb_ani.gif)
108+
109+
## Deprecations
110+
111+
### Visual Studio Code Extensions
112+
113+
Due to the plethora of changes to the _**Modern Fortran**_ extension the following
114+
VS Code extensions are redundant and no longer compatible with _**Modern Fortran**_:
115+
116+
- [FORTRAN IntelliSense](https://marketplace.visualstudio.com/items?itemName=hansec.fortran-ls): provided an interface for a now deprecated Language Server. It has been superseeded by `fortls` nad its native integration with _**Modern Fortran**_.
117+
- [Fortran Breakpoint Support](https://marketplace.visualstudio.com/items?itemName=ekibun.fortranbreaker): is redundant and deprecated, _**Modern Fortran**_ has native breaking point support.
118+
- [fortran](https://marketplace.visualstudio.com/items?itemName=Gimly81.fortran): is redundant and deprecated, _**Modern Fortran**_ has native support for Syntax Highlighting.
119+
- External Formatters like [vscode-modern-fortran-formatter](https://marketplace.visualstudio.com/items?itemName=yukiuuh.vscode-modern-fortran-formatter) are redundant and deprecated, _**Modern Fortran**_ has native formatter support for `fprettify` and `findent`.
120+
121+
### Visual Studio Code Settings
122+
123+
The following settings have been deprecated are replaced by the following:
124+
125+
- `includePaths` in favour of `linter.includePaths`
126+
- `gfortranExecutable` in favour of `linter.compilerPath`
127+
- `linterEnabled` in favour of `linter.compiler == Disabled`
128+
- `linterExtraArgs` in favour of `linter.extraArgs`
129+
- `linterModOutput` in favour of `linter.modOutput`
130+
- `ProvideSymbols` in favour of `provide.symbols`
131+
- `symbols`
132+
- `provideHover` in favour of `provide.hover`
133+
- `provideCompletion` in favour of `provide.autocomplete`
134+
135+
## Other
136+
137+
There are a number of other bug fixes, feature enhancements and minor
138+
improvements that have taken place in both the extension and the syntax highlighting. A brief list is shown below:
139+
140+
- Changed need for matching begin-end scope names, in the following constructs:
141+
Functions, Modules, Programs, Module Procedures, Subroutines, Submodules.
142+
For a more detailed explanation as to why see the issue
143+
([#278](https://github.com/fortran-lang/vscode-fortran-support/issues/278))
144+
- Changed `linter.compilerPath` to use the full path to the compiler instead of the root
145+
([#500](https://github.com/fortran-lang/vscode-fortran-support/issues/500))
146+
- Merged Language Server's log channel to Modern Fortran's log channel
147+
- Fixed `error stop variable` syntax highlighting
148+
([#486](https://github.com/fortran-lang/vscode-fortran-support/issues/486))
149+
- Fixed issue with linter cache containing outdated folders
150+
([#464](https://github.com/fortran-lang/vscode-fortran-support/issues/464))
151+
- Fixed slow performance of very long lines by using a different solution for
152+
([#207](https://github.com/fortran-lang/vscode-fortran-support/issues/207))
153+
([#309](https://github.com/fortran-lang/vscode-fortran-support/issues/309))
154+
- Fixes linter activation from `Disabled` to some compiler `X` without having
155+
to restart the extension
156+
([#296](https://github.com/fortran-lang/vscode-fortran-support/issues/296))
157+
- Fixes nopass pointer erroneous syntax highlighting
158+
([#318](https://github.com/fortran-lang/vscode-fortran-support/issues/318))
159+
- Fixes `%` accessor highlighting for type-bound subroutines
160+
([#325](https://github.com/fortran-lang/vscode-fortran-support/issues/325))
161+
- Fixes `fortls` not spawning when `ignoreWarning` was set to true
162+
([#365](https://github.com/fortran-lang/vscode-fortran-support/issues/365))
163+
- Fixes formatting on Windows (needed .exe extension)
164+
([#354](https://github.com/fortran-lang/vscode-fortran-support/issues/354))
165+
- Fixes `onSave` formatting errors
166+
([#364](https://github.com/fortran-lang/vscode-fortran-support/issues/364))

0 commit comments

Comments
 (0)