| // Copyright 2019 Google LLC | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // https://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| using System.Collections.Immutable; | |
| // Copied from Google.Api.Generator.Utils | |
| namespace Google.Api.Generator.Utils.Roslyn | |
| { | |
| public static class Keywords | |
| { | |
| // Taken from: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ | |
| private static IImmutableSet<string> s_keywords = ImmutableHashSet.Create( | |
| "abstract", | |
| "as", | |
| "async", // Not actually a keyword, but should almost always be treated as one, in terms of escaping etc. | |
| "base", | |
| "bool", | |
| "break", | |
| "byte", | |
| "case", | |
| "catch", | |
| "char", | |
| "checked", | |
| "class", | |
| "const", | |
| "continue", | |
| "decimal", | |
| "default", | |
| "delegate", | |
| "do", | |
| "double", | |
| "else", | |
| "enum", | |
| "event", | |
| "explicit", | |
| "extern", | |
| "false", | |
| "finally", | |
| "fixed", | |
| "float", | |
| "for", | |
| "foreach", | |
| "goto", | |
| "if", | |
| "implicit", | |
| "in", | |
| "int", | |
| "interface", | |
| "internal", | |
| "is", | |
| "lock", | |
| "long", | |
| "namespace", | |
| "new", | |
| "null", | |
| "object", | |
| "operator", | |
| "out", | |
| "override", | |
| "params", | |
| "private", | |
| "protected", | |
| "public", | |
| "readonly", | |
| "ref", | |
| "return", | |
| "sbyte", | |
| "sealed", | |
| "short", | |
| "sizeof", | |
| "stackalloc", | |
| "static", | |
| "string", | |
| "struct", | |
| "switch", | |
| "this", | |
| "throw", | |
| "true", | |
| "try", | |
| "typeof", | |
| "uint", | |
| "ulong", | |
| "unchecked", | |
| "unsafe", | |
| "ushort", | |
| "using", | |
| "virtual", | |
| "void", | |
| "volatile", | |
| "while" | |
| ); | |
| public static string PrependAtIfKeyword(string word) => IsKeyword(word) ? $"@{word}" : word; | |
| public static bool IsKeyword(string word) => s_keywords.Contains(word); | |
| } | |
| } | |