diff options
| author | Yong He <yonghe@outlook.com> | 2023-12-15 16:30:09 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-15 16:30:09 -0800 |
| commit | f8b3027d0be0b890152a6a649822741cd3a3b6b6 (patch) | |
| tree | 7180b8063f0b99be4b4ee31288214b59ccc461ff /source/slang/slang-workspace-version.cpp | |
| parent | 21d17abb0e511806b7c93effc58f37169d837766 (diff) | |
Add language server support for vfx files. (#3414)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-workspace-version.cpp')
| -rw-r--r-- | source/slang/slang-workspace-version.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/source/slang/slang-workspace-version.cpp b/source/slang/slang-workspace-version.cpp index 86cdd000a..9a707aae7 100644 --- a/source/slang/slang-workspace-version.cpp +++ b/source/slang/slang-workspace-version.cpp @@ -496,6 +496,35 @@ ASTMarkup* WorkspaceVersion::getOrCreateMarkupAST(ModuleDecl* module) return astMarkup.Ptr(); } +void WorkspaceVersion::ensureWorkspaceFlavor(UnownedStringSlice path) +{ + if (flavor != WorkspaceFlavor::Standard) + return; + + if (path.endsWithCaseInsensitive(".vfx")) + { + // Setup linkage for vfx files. + // TODO: consider supporting this as an external config file. + flavor = WorkspaceFlavor::VFX; + linkage->setEnableEffectAnnotations(true); + linkage->addPreprocessorDefine("VS", "__file_decl"); + linkage->addPreprocessorDefine("CS", "__file_decl"); + linkage->addPreprocessorDefine("GS", "__file_decl"); + linkage->addPreprocessorDefine("PS", "__file_decl"); + linkage->addPreprocessorDefine("RTX", "__file_decl"); + linkage->addPreprocessorDefine("PS_RTX", "__file_decl"); + linkage->addPreprocessorDefine("VS_RTX", "__file_decl"); + linkage->addPreprocessorDefine("FRAGMENT_ANNOTATION", ""); + linkage->addPreprocessorDefine("DynamicCombo", "//"); + linkage->addPreprocessorDefine("DynamicComboRule", "//"); + linkage->addPreprocessorDefine("HEADER", "__ignored_block"); + linkage->addPreprocessorDefine("MODES", "__ignored_block"); + linkage->addPreprocessorDefine("PS_RENDER_STATE", "__ignored_block"); + linkage->addPreprocessorDefine("FEATURES", "__ignored_block"); + linkage->addPreprocessorDefine("COMMON", "__transparent_block"); + } +} + Module* WorkspaceVersion::getOrLoadModule(String path) { Module* module; @@ -512,6 +541,9 @@ Module* WorkspaceVersion::getOrLoadModule(String path) auto moduleName = getMangledNameFromNameString(path.getUnownedSlice()); linkage->contentAssistInfo.primaryModuleName = linkage->getNamePool()->getName(moduleName); linkage->contentAssistInfo.primaryModulePath = path; + + ensureWorkspaceFlavor(path.getUnownedSlice()); + // Note: // The module at `path` may have already been loaded into the linkage previously // due to an `import`. However that module won't get fully checked in when the checker |
