Ответ 1
Нет, компилятор не позволяет добавлять ключевые слова из коробки.
Это не значит, что вы не можете выполнить то, что хотите, но это будет не тривиально. Вам понадобится выполнить собственный анализ статического кода.
Рослин
Один из способов сделать это - через анализаторы кода .NET Compiler Services (Roslyn). Вы можете прочитать эту статью MSDN, чтобы начать: https://msdn.microsoft.com/en-us/magazine/dn879356.aspx, и вы получите что-то похожее на это:
Это будет работать из Visual Studio, и вы можете создать хотя бы Предупреждения, я бы тоже принял Ошибки (или вам нужно включить "Обработать предупреждения как ошибки" ).
Поскольку вы хотите декларативно добавить проверку на определенные переменные, вам нужно использовать Attributes
:
/// <summary> Indicate a variable must be given a value
/// in the same line it declared </summary>
public class ImportantAttribute : Attribute {}
public class Program
{
[Important]
object thisShouldError;
object thisIsFine;
}
Затем, когда вы пишете Analyzer, вам нужно проверить объявление переменной node, чтобы увидеть, украшено ли оно Important
.
Если вы хотите, чтобы это работало на сервере сборки (или вне VS), вам может понадобиться сделать еще одну работу: Roslyn: загрузка рабочей области в консольном приложении, но не в msbuild задача
StyleCop
Самый простой способ - это, вероятно, использовать Code Analysis (т.е. StyleCop) для запуска наборов правил статического анализа против вашей базы кода:
Вам нужно будет написать свой собственный набор правил, и я не знаю, даст ли Rule Sets верность, чтобы иметь возможность объявлять объявления переменных, которые вы хотите принудительно проверить, то есть я не знаю, если вы сможете смешать и сопоставить это:
public class Program
{
[Important]
object thisShouldError;
object thisIsFine;
}
Fody
Другим подходом является использование инструмента слияния IL, такого как Fody, который позволяет вам манипулировать IL вашего приложения во время компиляции. AFAIK вы не можете напрямую генерировать ошибки компиляции, но вы можете добавить недопустимый IL, который, в свою очередь, приведет к ошибке времени компиляции.
Итак, на основе того же кода, что и выше, после компиляции с Fody вы получите код вроде:
public class Program
{
[Important]
object thisShouldError YouForgotToInitializeThisImportantVariable;
object thisIsFine;
}
Пользовательский компилятор
Microsoft открыла исходный код компилятора С#: https://github.com/dotnet/roslyn. Поэтому, если вы чувствуете себя очень амбициозно, вы можете абсолютно добавить свои собственные ключевые слова в свою собственную вилку компилятора. Конечно, вы, по сути, будете иметь свой собственный язык, и он не сможет скомпилировать ничего, кроме вашего настраиваемого компилятора.