Fortran-lang GSoC 2024 Project ideas & mentors

These are the projects I have on my to-do list.
My availability during the summer is questionable right now, but feel free to reach out either for mentoring or applying.


MPI support (fortls)

fortls has support for Fortran intrinsics, Standard modules and OpenMP.
It does not however support MPI. The goal of this project is to add full support
for completions, hover and signature help for MPI variables, subroutines and functions.

Due to the size of the MPI standard, the process of extracting the necessary
information from the standard such as names, interfaces and documentation will
be automated. The student will be responsible for creating a scraper/parser
to fetch the necessary information from the MPI standard and then create the
serialised data (JSON) to be used by fortls.

Discourse thread: MPI documentation and interfaces

Expected outcomes: fortls will have completion and hover support for MPI.

Skills preferred: Python, Fortran

Difficulty: intermediate, 175 hours

Mentors:
Giannis Nikiteas (@gnikit)

Semantic highlighting and collapsable scopes (fortls)

As part of this project the student will add support to fortls for the
Semantics Tokens request, which is used to provide improved syntax highlighting
and the Folding Range request, which is used to provide collapsable scopes.

Related Issues:

Expected outcomes: fortls will support for semantic highlighting and collapsable scopes.

Skills preferred: Python, Fortran

Difficulty: intermediate, 175 hours

Mentors:
Giannis Nikiteas (@gnikit)

Replace explicit interface with pygls (fortls)

fortls uses explicit interfaces to the Language Server Protocol (LSP).
To decrease code duplication and increase maintainability, the work of
maintaining the explicit interfaces should be replaced with the use of
pygls’s types module.

Related Issues:

Expected outcomes: fortls uses pygls’ to define LSP interfaces, types and requests.

Skills preferred: Python, Fortran

Difficulty: advanced, 350 hours

Mentors:
Giannis Nikiteas (@gnikit)

Python environment manager (vscode-fortran-support)

In the Modern Fortran for VS Code extension, the use of Python as a means to
install third party tools is essential. The goal of this project is to
create a robust Python environment manager for installing and running third
party tools such as fortls, fpm, findent, etc., taking into account
the user’s setup (venv, conda, system Python, etc.).

Expected outcomes: Modern Fortran for VS Code will have a robust Python environment manager for installing and running third party tools.

Skills preferred: Typescript, Python

Difficulty: advanced, 175 hours

Mentors:
Giannis Nikiteas (@gnikit)

vscode integration with fpm (vscode-fortran-support)

The goal of this project is to allow fpm integration with the Modern Fortran
extension for Visual Studio Code, similar to how CMake and Meson are integrated
in VS Code.

Using an Activity bar icon, the user will be able to build and run projects,
tests and examples. The student will be responsible for creating the GUI
integration and the necessary backend to communicate with fpm.

Expected outcomes: Modern Fortran for VS Code will have a GUI integration
with fpm to build and run projects, tests and examples.

Skills preferred: Typescript, Fortran

Difficulty: advanced, 350 hours

Mentors:
Giannis Nikiteas (@gnikit)

Export build order and compile_commands.json (fpm)

fpm has the ability to automatically determine the build order of a project’s
source files. This information is valuable to third party tools such as
language servers and code analysis tools. The goal of this project is to
export the build order of a project’s source files in the compile_commands.json.

An extension of this project is to implement the full syntax of
compile_commands.json as described in the Clang documentation. This would bring fpm a step closer
to being compatible with other build tools.

Expected outcomes: fpm will export a compile_commands.json file.

Skills preferred: Fortran

Difficulty: advanced, 175-350 hours

Mentors:
Giannis Nikiteas (@gnikit)

3 Likes