Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Go to definition not available in Neovim for classes and recipes #380

Open
Knaifhogg opened this issue Jan 8, 2025 · 2 comments
Open

Go to definition not available in Neovim for classes and recipes #380

Knaifhogg opened this issue Jan 8, 2025 · 2 comments
Labels
enhancement New feature or request

Comments

@Knaifhogg
Copy link

I have an issue where go to definition doesn't work on classes and files. I compared it to VSCode which works similarly if it doesn't run the recipe parsing. So I can hover on inherit and get info about it, but if you go to definition on a class nothing happens. After scanning in VSCode it works as expected in VSCode. Neovim doesn't appear to do any recipe parsing which maybe is the issue.

I have set it up using mason and lspconfig. Excerpt of my config (using lazy.nvim, config based on kickstart.nvim, excluded some parts):

  {
    -- Main LSP Configuration
    'neovim/nvim-lspconfig',
    lazy = false,
    dependencies = {
      -- Automatically install LSPs and related tools to stdpath for Neovim
      { 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants
      'williamboman/mason-lspconfig.nvim',
      'WhoIsSethDaniel/mason-tool-installer.nvim',

      -- Useful status updates for LSP.
      -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
      { 'j-hui/fidget.nvim', opts = {} },

      -- Allows extra capabilities provided by nvim-cmp
      'hrsh7th/cmp-nvim-lsp',
    },
    config = function()
      require('mason').setup()

      -- you can add other tools here that you want mason to install
      -- for you, so that they are available from within neovim.
      local ensure_installed = vim.tbl_keys(servers or {})
      vim.list_extend(ensure_installed, {
        'stylua', -- used to format lua code
      })
      require('mason-tool-installer').setup { ensure_installed = ensure_installed }

      require('mason-lspconfig').setup {
        handlers = {
          function(server_name)
            local server = servers[server_name] or {}
            -- this handles overriding only values explicitly passed
            -- by the server configuration above. useful when disabling
            -- certain features of an lsp (for example, turning off formatting for ts_ls)
            server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
            require('lspconfig')[server_name].setup(server)
          end,
        },
      }

      -- add servers not supported by mason-lspconfig
      require('lspconfig').bitbake_ls.setup {
        root_dir = vim.fn.getcwd(),
        settings = {
          bitbake = {
            pathtobuildfolder = '/mnt/build/prod/build/',
            pathtoenvscript = '/mnt/build/prod/oe-init-build-env',
            pathtobitbakefolder = '/mnt/build/prod/bitbake',
            workingdirectory = '/mnt/build/prod/',
          },
        },
      }
    end,

And I can see it launches the server when I use LspInfo:

lspconfig: require("lspconfig.health").check()

LSP configs active in this session (globally) ~
- Configured servers: rust_analyzer, bashls, fortls, lua_ls, eslint, clangd, vtsls, bitbake_ls, asm_lsp
- OK Deprecated servers: (none)

LSP configs active in this buffer (bufnr: 4) ~
- Language client log: ~/.local/state/nvim/lsp.log
- Detected filetype: `bitbake`
- 1 client(s) attached to this buffer
- Client: `bitbake_ls` (id: 1, bufnr: [4])
  root directory:    /mnt/build/prod/
  filetypes:         bitbake
  cmd:               ~/.local/share/nvim/mason/bin/language-server-bitbake --stdio
  version:           `?` (Failed to get version)
  
  executable:        true
  autostart:         true

Docs for active configs: ~
- bitbake_ls docs: >markdown
  
  https://github.com/yoctoproject/vscode-bitbake/tree/staging/server
  https://www.npmjs.com/package/language-server-bitbake
  
  Official Bitbake Language Server for the Yocto Project.
  
  Can be installed from npm or github.
  npm install -g language-server-bitbake

When viewing LspLog with debugging on it looks like the client does request dfinition but gets an empty result in the response. So it probably has to do with recipe parsing?

LspLog:

[START][2025-01-08 11:49:25] LSP logging initiated
[INFO][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:731	"Starting RPC client"	{  cmd = { "/home/username/.local/share/nvim/mason/bin/language-server-bitbake", "--stdio" },  extra = {    cwd = "/mnt/build/prod"  }}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:286	"rpc.send"	{  id = 1,  jsonrpc = "2.0",  method = "initialize",  params = {    capabilities = {      general = {        positionEncodings = { "utf-16" }      },      textDocument = {        callHierarchy = {          dynamicRegistration = false        },        codeAction = {          codeActionLiteralSupport = {            codeActionKind = {              valueSet = { "", "quickfix", "refactor", "refactor.extract", "refactor.inline", "refactor.rewrite", "source", "source.organizeImports" }            }          },          dataSupport = true,          dynamicRegistration = true,          isPreferredSupport = true,          resolveSupport = {            properties = { "edit" }          }        },        completion = {          completionItem = {            commitCharactersSupport = false,            deprecatedSupport = false,            documentationFormat = { "markdown", "plaintext" },            preselectSupport = false,            snippetSupport = false          },          completionItemKind = {            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }          },          completionList = {            itemDefaults = { "editRange", "insertTextFormat", "insertTextMode", "data" }          },          contextSupport = false,          dynamicRegistration = false        },        declaration = {          linkSupport = true        },        definition = {          dynamicRegistration = true,          linkSupport = true        },        diagnostic = {          dynamicRegistration = false        },        documentHighlight = {          dynamicRegistration = false        },        documentSymbol = {          dynamicRegistration = false,          hierarchicalDocumentSymbolSupport = true,          symbolKind = {            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }          }        },        formatting = {          dynamicRegistration = true        },        hover = {          contentFormat = { "markdown", "plaintext" },          dynamicRegistration = true        },        implementation = {          linkSupport = true        },        inlayHint = {          dynamicRegistration = true,          resolveSupport = {            properties = { "textEdits", "tooltip", "location", "command" }          }        },        publishDiagnostics = {          dataSupport = true,          relatedInformation = true,          tagSupport = {            valueSet = { 1, 2 }          }        },        rangeFormatting = {          dynamicRegistration = true        },        references = {          dynamicRegistration = false        },        rename = {          dynamicRegistration = true,          prepareSupport = true        },        semanticTokens = {          augmentsSyntaxTokens = true,          dynamicRegistration = false,          formats = { "relative" },          multilineTokenSupport = false,          overlappingTokenSupport = true,          requests = {            full = {              delta = true            },            range = false          },          serverCancelSupport = false,          tokenModifiers = { "declaration", "definition", "readonly", "static", "deprecated", "abstract", "async", "modification", "documentation", "defaultLibrary" },          tokenTypes = { "namespace", "type", "class", "enum", "interface", "struct", "typeParameter", "parameter", "variable", "property", "enumMember", "event", "function", "method", "macro", "keyword", "modifier", "comment", "string", "number", "regexp", "operator", "decorator" }        },        signatureHelp = {          dynamicRegistration = false,          signatureInformation = {            activeParameterSupport = true,            documentationFormat = { "markdown", "plaintext" },            parameterInformation = {              labelOffsetSupport = true            }          }        },        synchronization = {          didSave = true,          dynamicRegistration = false,          willSave = true,          willSaveWaitUntil = true        },        typeDefinition = {          linkSupport = true        }      },      window = {        showDocument = {          support = true        },        showMessage = {          messageActionItem = {            additionalPropertiesSupport = false          }        },        workDoneProgress = true      },      workspace = {        applyEdit = true,        configuration = true,        didChangeConfiguration = {          dynamicRegistration = false        },        didChangeWatchedFiles = {          dynamicRegistration = false,          relativePatternSupport = true        },        inlayHint = {          refreshSupport = true        },        semanticTokens = {          refreshSupport = true        },        symbol = {          dynamicRegistration = false,          symbolKind = {            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }          }        },        workspaceEdit = {          resourceOperations = { "rename", "create", "delete" }        },        workspaceFolders = true      }    },    clientInfo = {      name = "Neovim",      version = "0.10.1+g7e194f0d0"    },    initializationOptions = vim.empty_dict(),    processId = 3876001,    rootPath = "/mnt/build/prod",    rootUri = "file:///mnt/build/prod",    trace = "off",    workDoneToken = "1",    workspaceFolders = { {        name = "/mnt/build/prod",        uri = "file:///mnt/build/prod"      } }  }}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:408	"rpc.receive"	{  id = 1,  jsonrpc = "2.0",  result = {    capabilities = {      completionProvider = {        resolveProvider = true,        triggerCharacters = { ":", "[" }      },      definitionProvider = true,      hoverProvider = true,      referencesProvider = true,      renameProvider = {        prepareProvider = true      },      semanticTokensProvider = {        full = true,        legend = {          tokenModifiers = { "declaration", "deprecated", "modification", "readonly" },          tokenTypes = { "function", "variable", "parameter", "class", "number", "operator", "string", "keyword" }        }      },      textDocumentSync = 2,      workspace = {        fileOperations = {          didCreate = {            filters = { {                pattern = {                  glob = "**/*"                },                scheme = "file"              } }          },          didDelete = {            filters = { {                pattern = {                  glob = "**/*"                },                scheme = "file"              } }          },          didRename = {            filters = { {                pattern = {                  glob = "**/*"                },                scheme = "file"              } }          }        }      }    }  }}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:286	"rpc.send"	{  jsonrpc = "2.0",  method = "initialized",  params = vim.empty_dict()}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:286	"rpc.send"	{  jsonrpc = "2.0",  method = "workspace/didChangeConfiguration",  params = {    settings = {      bitbake = {        pathToBitbakeFolder = "/mnt/build/prod/bitbake",        pathToBuildFolder = "/mnt/build/prod/build/",        pathToEnvScript = "/mnt/build/prod/oe-init-build-env",        workingDirectory = "/mnt/build/prod/"      }    }  }}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:286	"rpc.send"	{  jsonrpc = "2.0",  method = "textDocument/didOpen",  params = {    textDocument = {      languageId = "bitbake",      text = "require automake.inc\nLICENSE = \"GPL-2.0-only\"\nLIC_FILES_CHKSUM = \"file://COPYING;md5=751419260aa954499f7abaabaa882bbe\"\nDEPENDS:class-native = \"autoconf-native\"\n\nNAMEVER = \"${@oe.utils.trim_version(\"${PV}\", 2)}\"\n\nRDEPENDS:${PN} += \"\\\n    autoconf \\\n    perl \\\n    perl-module-bytes \\\n    perl-module-data-dumper \\\n    perl-module-strict \\\n    perl-module-text-parsewords \\\n    perl-module-thread-queue \\\n    perl-module-threads \\\n    perl-module-vars \"\n\nRDEPENDS:${PN}:class-native = \"autoconf-native hostperl-runtime-native\"\n\nSRC_URI += \"\\\n           file://0001-automake-Update-for-python.m4-to-respect-libdir.patch \\\n           file://buildtest.patch \\\n           file://performance.patch \\\n           file://new_rt_path_for_test-driver.patch \\\n           file://0001-automake-Add-default-libtool_tag-to-cppasm.patch \\\n           file://0001-build-fix-race-in-parallel-builds.patch \\\n           file://0001-Drop-ar-u-argument.patch \\\n           \"\n\nSRC_URI[sha256sum] = \"07bd24ad08a64bc17250ce09ec56e921d6343903943e99ccf63bbf0705e34605\"\n\nPERL = \"${USRBINPATH}/perl\"\nPERL:class-native = \"${USRBINPATH}/env perl\"\nPERL:class-nativesdk = \"${USRBINPATH}/env perl\"\n\nCACHED_CONFIGUREVARS += \"ac_cv_path_PERL='${PERL}'\"\n\ndo_install:append () {\n    install -d ${D}${datadir}\n}\n\nBBCLASSEXTEND = \"native nativesdk\"\n",      uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb",      version = 0    }  }}
[INFO][2025-01-08 11:49:25] ...m/lsp/client.lua:620	"LSP[bitbake_ls]"	"server_capabilities"	{  server_capabilities = {    completionProvider = {      resolveProvider = true,      triggerCharacters = { ":", "[" }    },    definitionProvider = true,    hoverProvider = true,    referencesProvider = true,    renameProvider = {      prepareProvider = true    },    semanticTokensProvider = {      full = true,      legend = {        tokenModifiers = { "declaration", "deprecated", "modification", "readonly" },        tokenTypes = { "function", "variable", "parameter", "class", "number", "operator", "string", "keyword" }      }    },    textDocumentSync = {      change = 2,      openClose = true,      save = {        includeText = false      },      willSave = false,      willSaveWaitUntil = false    },    workspace = {      fileOperations = {        didCreate = {          filters = { {              pattern = {                glob = "**/*"              },              scheme = "file"            } }        },        didDelete = {          filters = { {              pattern = {                glob = "**/*"              },              scheme = "file"            } }        },        didRename = {          filters = { {              pattern = {                glob = "**/*"              },              scheme = "file"            } }        }      }    }  }}
[DEBUG][2025-01-08 11:49:25] ...m/lsp/client.lua:678	"LSP[bitbake_ls]"	"client.request"	1	"textDocument/semanticTokens/full"	{  textDocument = {    uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"  }}	<function 1>	4
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:286	"rpc.send"	{  id = 2,  jsonrpc = "2.0",  method = "textDocument/semanticTokens/full",  params = {    textDocument = {      uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"    }  }}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:408	"rpc.receive"	{  jsonrpc = "2.0",  method = "bitbake/EmbeddedLanguageDocs",  params = { { {        characterIndexes = { 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556 },        content = "#!/bin/sh\n\n# Original BitBake document: file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb\n# shellcheck disable=SC2317\n. /mnt/build/prod/meta/classes-global/logging.bbclass\n. /mnt/build/prod/meta/classes-global/base.bbclass\n                    \n                        \n                                                                        \n                                        \n\n                                                 \n\n                    \n              \n          \n                       \n                             \n                        \n                                 \n                              \n                         \n                      \n\n                                                                       \n\n             \n                                                                              \n                                   \n                                     \n                                                     \n                                                                         \n                                                                \n                                                 \n            \n\n                                                                                       \n\n                           \n                                            \n                                               \n\n                                                   \n\ndo_install        () {\n    install -d ${D}${datadir}\n}\n\n                                  \n",        language = "bash",        originalUri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"      }, {        characterIndexes = { 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822 },        content = '# Original BitBake document: file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb\nimport bb, bb.build, bb.compress.zstd, bb.data, bb.data_smart, bb.event, bb.fetch2, bb.parse, bb.persist_data, bb.process, bb.progress, bb.runqueue, bb.siggen, bb.utils\nimport oe.data, oe.path, oe.utils, oe.types, oe.package, oe.packagegroup, oe.sstatesig, oe.lsb, oe.cachedpath, oe.license, oe.qa, oe.reproducible, oe.rust, oe.buildcfg\nd = bb.data_smart.DataSmart()\ne = bb.event.Event()\ne.data = d\nimport os\n                    \n                        \n                                                                        \n                                        \n\n             \n\noe.utils.trim_version("${PV}", 2)\n \n\n                    \n              \n          \n                       \n                             \n                        \n                                 \n                              \n                         \n                      \n\n                                                                       \n\n             \n                                                                              \n                                   \n                                     \n                                                     \n                                                                         \n                                                                \n                                                 \n            \n\n                                                                                       \n\n                           \n                                            \n                                               \n\n                                                   \n\n                      \n                             \n \n\n                                  \n',        language = "python",        originalUri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"      } } }}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:408	"rpc.receive"	{  jsonrpc = "2.0",  method = "textDocument/publishDiagnostics",  params = {    diagnostics = {},    uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"  }}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:408	"rpc.receive"	{  id = 0,  jsonrpc = "2.0",  method = "bitbake/getRecipeLocalFiles",  params = {    uri = "/mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"  }}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:408	"rpc.receive"	{  id = 2,  jsonrpc = "2.0",  result = {    data = { 1, 0, 7, 1, 1, 1, 0, 16, 1, 1, 1, 0, 7, 1, 1, 0, 8, 12, 5, 8, 2, 0, 7, 1, 1, 2, 0, 8, 1, 1, 0, 11, 2, 1, 1, 11, 0, 8, 1, 1, 0, 11, 2, 1, 1, 0, 4, 12, 5, 8, 2, 0, 7, 1, 1, 10, 0, 7, 1, 1, 2, 0, 4, 1, 1, 0, 10, 10, 1, 1, 1, 0, 4, 1, 1, 0, 5, 12, 5, 8, 0, 18, 10, 1, 1, 1, 0, 4, 1, 1, 0, 5, 15, 5, 8, 0, 21, 10, 1, 1, 2, 0, 20, 1, 1, 0, 44, 4, 1, 1, 2, 0, 10, 0, 1, 0, 11, 6, 7, 0, 1, 4, 7, 0, 0, 0, 13, 1, 1, 0, 0, 4, 7, 1, 0, 3, 0, 13, 1, 1 },    resultId = "1736333365094"  }}
[WARN][2025-01-08 11:49:25] ...m/lsp/client.lua:1025	"server_request: no handler found for"	"bitbake/getRecipeLocalFiles"
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:423	"server_request: callback result"	{  err = {    code = -32601,    message = "MethodNotFound",    <metatable> = {      __tostring = <function 1>    }  },  status = true}
[DEBUG][2025-01-08 11:49:25] .../vim/lsp/rpc.lua:286	"rpc.send"	{  error = {    code = -32601,    message = "MethodNotFound",    <metatable> = {      __tostring = <function 1>    }  },  id = 0,  jsonrpc = "2.0"}
[DEBUG][2025-01-08 11:49:32] ...m/lsp/client.lua:678	"LSP[bitbake_ls]"	"client.request"	1	"textDocument/hover"	{  position = {    character = 0,    line = 0  },  textDocument = {    uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"  }}	<function 1>	4
[DEBUG][2025-01-08 11:49:32] .../vim/lsp/rpc.lua:286	"rpc.send"	{  id = 3,  jsonrpc = "2.0",  method = "textDocument/hover",  params = {    position = {      character = 0,      line = 0    },    textDocument = {      uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"    }  }}
[DEBUG][2025-01-08 11:49:32] .../vim/lsp/rpc.lua:408	"rpc.receive"	{  id = 3,  jsonrpc = "2.0",  result = {    contents = {      kind = "markdown",      value = "**require**\n___\nBitBake understands the require directive. This directive behaves just like the include directive with the exception that BitBake raises a parsing error if the file to be included cannot be found. Thus, any file you require is inserted into the file that is being parsed at the location of the directive. \n\nThe require directive, like the include directive previously described, is a more generic method of including functionality as compared to the inherit directive, which is restricted to class (i.e. .bbclass) files. The require directive is applicable for any other kind of shared or encapsulated functionality or configuration that does not suit a .bbclass file. \n\nSimilar to how BitBake handles include, if the path specified on the require line is a relative path, BitBake locates the first file it can find within BBPATH. \n\nAs an example, suppose you have two versions of a recipe (e.g. foo_1.2.2.bb and foo_2.0.0.bb) where each version contains some identical functionality that could be shared. You could create an include file named foo.inc that contains the common definitions needed to build “foo”. You need to be sure foo.inc is located in the same directory as your two recipe files as well. Once these conditions are set up, you can share the functionality using a require directive from within each recipe: \n ```require foo.inc```"    }  }}
[DEBUG][2025-01-08 11:49:40] ...m/lsp/client.lua:678	"LSP[bitbake_ls]"	"client.request"	1	"textDocument/hover"	{  position = {    character = 8,    line = 0  },  textDocument = {    uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"  }}	<function 1>	4
[DEBUG][2025-01-08 11:49:40] .../vim/lsp/rpc.lua:286	"rpc.send"	{  id = 4,  jsonrpc = "2.0",  method = "textDocument/hover",  params = {    position = {      character = 8,      line = 0    },    textDocument = {      uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"    }  }}
[DEBUG][2025-01-08 11:49:40] .../vim/lsp/rpc.lua:408	"rpc.receive"	{  id = 4,  jsonrpc = "2.0"}
[DEBUG][2025-01-08 11:49:43] ...m/lsp/client.lua:678	"LSP[bitbake_ls]"	"client.request"	1	"textDocument/definition"	{  position = {    character = 8,    line = 0  },  textDocument = {    uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"  }}	<function 1>	4
[DEBUG][2025-01-08 11:49:43] .../vim/lsp/rpc.lua:286	"rpc.send"	{  id = 5,  jsonrpc = "2.0",  method = "textDocument/definition",  params = {    position = {      character = 8,      line = 0    },    textDocument = {      uri = "file:///mnt/build/prod/poky/meta/recipes-devtools/automake/automake_1.16.5.bb"    }  }}
[DEBUG][2025-01-08 11:49:43] .../vim/lsp/rpc.lua:408	"rpc.receive"	{  id = 5,  jsonrpc = "2.0",  result = {}}
@deribaucourt deribaucourt changed the title Go to definition not working in Neovim Go to definition not working in Neovim for classes and recipes Jan 8, 2025
@deribaucourt deribaucourt added the enhancement New feature or request label Jan 8, 2025
@deribaucourt
Copy link
Member

Hello @Knaifhogg
Indeed, the standalone language server boasts less features than the VSCode integration.
Like you guessed, there is no project/recipe scan on VIM, so we cannot generate the list of classes or references to other files present in your bitbake environment.

Currently, the main features available on VIM are completion and hover for official Yocto variables with their documentation. (Ex: Typing DEPE will suggest DEPENDS, and show the doc).

All the BitBake commands are run on the VSCode-client side in the current implementation, as well as many other features. Some major changes would be required to make more of them available for Vim. Although this is definitely something the Yocto Project would like to do, but we currently don't have the resources for it.

@deribaucourt deribaucourt changed the title Go to definition not working in Neovim for classes and recipes Go to definition not available in Neovim for classes and recipes Jan 8, 2025
@deribaucourt
Copy link
Member

Specifically, regarding "Go to definition" for vim. We would have two options:

  1. Also allow running the bitbake environment on the server (but it still needs to be runnable in the client to be presented in the terminal view)
  2. Re-implement a "fast" linter that we had with tree-sitter/find to provide less accurate but more portable results in case the client is not there

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants