dotnet / interactive

.NET Interactive combines the power of .NET with many other languages to create notebooks, REPLs, and embedded coding experiences. Share code, explore data, write, and learn across your apps in ways you couldn't before.
MIT License
2.92k stars 389 forks source link

default kernel selection is being changed after save #3527

Open Fxplorer opened 7 months ago

Fxplorer commented 7 months ago

Describe the bug

Please provide as much information as you can.

Upon saving a notebook file (specifically .dib here but the .ipynb books exhibit the same behavior on me) where creation of notebook I select "F#".

Upon first save, the code box resets to csharp. Looking at the file in a text editor shows

{"kernelInfo":{"defaultKernelName":"fsharp","items":[{"aliases":[],"languageName":"fsharp","name":"fsharp"}]}}

which should be ok. Manually changing the block back to F# then adding a few new ones, then save again.

file changes to: {"kernelInfo":{"defaultKernelName":"csharp","items":[{"aliases":[],"name":"csharp"},{"aliases":[],"languageName":"fsharp","name":"fsharp"}]}}

This happens enough times in trying to use notebooks to be quite annoying, and has happened with .dib and .ipynb

Issues that are similar in nature are: https://github.com/dotnet/interactive/issues/1309 https://github.com/dotnet/interactive/issues/1038

and in vscode are: https://github.com/microsoft/vscode-jupyter/issues/4757 https://github.com/microsoft/vscode/issues/140673 https://github.com/microsoft/vscode-jupyter/issues/4757

Please complete the following:

Which version of .NET Interactive are you using? (In a notebook, run the #!about magic command. ):

Version: 1.0.520801+1e5d205f82c7f5bb1b2e5ce60c680491552cfa23
Library version: 1.0.0-beta.24208.1+1e5d205f82c7f5bb1b2e5ce60c680491552cfa23
Build date: 2024-04-08T08:18:30.0000000Z

vscode info:

Version: 1.88.1
Commit: e170252f762678dec6ca2cc69aba1570769a5d39
Date: 2024-04-10T17:34:12.840Z
Electron: 28.2.8
ElectronBuildId: 27744544
Chromium: 120.0.6099.291
Node.js: 18.18.2
V8: 12.0.267.19-electron.0
OS: Linux x64 6.1.0-20-amd64

Screenshots

If applicable, add screenshots to help explain your problem. A video demo is at the link of https://www.dropbox.com/scl/fi/9p7nzjarbmciyqitib63c/2024-04-18-14-19-55.mp4?rlkey=tknlky6vs9twikwbtfb3ahr13&dl=0

with the following notes: 0:01:20 saving file after selecting F# as default kernal changes the code window to C# when save is done. 0:03:52 shows the text of the example1.dib file after adding a couple new blocks and saving. It has changed some defaults to csharp.

pkese commented 1 month ago

@jonsequitur This above issue makes Dotnet.Interactive practically unusable to anyone using any other kernel but C#.

I was looking at this code:
https://github.com/dotnet/interactive/blob/11e9be0dae01de51a59ef8e43a0d59dd9c1d3399/src/polyglot-notebooks-vscode-common/src/metadataUtilities.ts#L99C44-L99C52

It looks like its' accessing

const kernelInfo = interactiveDocument.metadata.kernelInfo;

where in fact in .ipynb files that should be

const kernelInfo = interactiveDocument.metadata.polyglot_notebook.kernelInfo;

At least if this is the metadata that it's accessing:

{
  "metadata": {
    "kernelspec": {
     "display_name": ".NET (F#)",
     "language": "F#",
     "name": ".net-fsharp"
    },
    "polyglot_notebook": {
     "kernelInfo": {
      "defaultKernelName": "fsharp",
      "items": [
       {
        "aliases": [],
        "languageName": "fsharp",
        "name": "fsharp"
       }
      ]
     }
    }
   },
   "nbformat": 4,
   "nbformat_minor": 2
}

Can you look at it, thanks.