@Override public void visitElement(final PsiElement element) { if (element instanceof YAMLKeyValue) { final YAMLKeyValue yamlKeyValue = (YAMLKeyValue) element; if (OpenApiConstants.REF_KEY.equals(yamlKeyValue.getKeyText())) { final String refValue = StringUtils.removeAllQuotes(yamlKeyValue.getValueText()); if (isYamlFile(refValue)) { result.add( extractFileNameFromFileRefValue(refValue) + DELIMITER + getOpenApiFileTypeFromRefElement(yamlKeyValue.getValue(), refValue)); } } } super.visitElement(element); }
private void registerYmlRoutePatternProblem(@NotNull ProblemsHolder holder, @NotNull YAMLKeyValue element) { String s = PsiElementUtils.trimQuote(element.getKeyText()); if("pattern".equals(s) && YamlHelper.isRoutingFile(element.getContainingFile())) { // pattern: foo holder.registerProblem(element.getKey(), "Pattern is deprecated; use path instead", ProblemHighlightType.LIKE_DEPRECATED); } else if(("_method".equals(s) || "_scheme".equals(s)) && YamlHelper.isRoutingFile(element.getContainingFile())) { // requirements: { _method: 'foo', '_scheme': 'foo' } YAMLKeyValue parentOfType = PsiTreeUtil.getParentOfType(element, YAMLKeyValue.class); if(parentOfType != null && "requirements".equals(parentOfType.getKeyText())) { holder.registerProblem(element.getKey(), String.format("The '%s' requirement is deprecated", s), ProblemHighlightType.LIKE_DEPRECATED); } } }
@Override public List<String> getSecurityScopesIfOAuth2(final PsiElement securityDefinitionItem) { final List<YAMLKeyValue> properties = getChildProperties(securityDefinitionItem); final boolean isOAuth2 = properties .stream() .anyMatch( prop -> { final Optional<String> value = Optional.ofNullable(prop.getValue()) .map(YAMLValue::getText) .map(StringUtils::removeAllQuotes); return "type".equals(prop.getName()) && Optional.of("oauth2").equals(value); }); if (isOAuth2) { return properties .stream() .filter(prop -> "scopes".equals(prop.getName())) .map(this::getChildProperties) .flatMap(Collection::stream) .map(YAMLKeyValue::getName) .collect(Collectors.toList()); } return ImmutableList.of(); }
/** * Attach all parent array keys to list (foo:\n bar:): [foo, bar] * * @param yamlKeyValue current key value context * @param key the key list */ public static void getParentArrayKeys(YAMLKeyValue yamlKeyValue, List<String> key) { key.add(yamlKeyValue.getKeyText()); PsiElement yamlCompount = yamlKeyValue.getParent(); if(yamlCompount instanceof YAMLCompoundValue) { PsiElement yamlKeyValueParent = yamlCompount.getParent(); if(yamlKeyValueParent instanceof YAMLKeyValue) { getParentArrayKeys((YAMLKeyValue) yamlKeyValueParent, key); } } }
@Override public boolean accepts(@NotNull YAMLKeyValue yamlKeyValue, ProcessingContext processingContext) { return this.keyText.equals(yamlKeyValue.getKeyText()); } }
public Map<String, String> getLocalParameterMap(PsiFile psiFile) { Map<String, String> map = new HashMap<>(); for(YAMLKeyValue yamlParameterArray: getQualifiedKeyValuesInFile((YAMLFile) psiFile, "parameters")) { String keyName = yamlParameterArray.getKeyText(); if(StringUtils.isBlank(keyName)) { continue; } // extract parameter value String textValue = null; PsiElement value = yamlParameterArray.getValue(); if(value instanceof YAMLScalar) { String myTextValue = ((YAMLScalar) value).getTextValue(); if(myTextValue.length() > 0 && myTextValue.length() < 150) { textValue = myTextValue; } } map.put(keyName.toLowerCase(), textValue); } return map; }
YAMLValue value = yamlKeyValue.getValue(); if(!(value instanceof YAMLMapping)) { return Collections.emptyList(); String keyText = ((YAMLKeyValue) element).getKeyText(); if(StringUtils.isBlank(keyText)) { continue; YAMLValue yamlValue = ((YAMLKeyValue) element).getValue(); if (yamlValue != null) { valueText = ((YAMLKeyValue) element).getValueText(); } else { PsiElement key = ((YAMLKeyValue) element).getKey(); if(key != null) { PsiElement nextSiblingOfType = PsiElementUtils.getNextSiblingOfType(key, PlatformPatterns.psiElement(YAMLTokenTypes.TAG));
YAMLMapping parentMapping = yamlKeyValue.getParentMapping(); String valueText = classKeyValue.getValueText(); if (StringUtils.isNotBlank(valueText)) { return valueText; PsiElement yamlMapping = yamlKeyValue.getParent(); if(yamlMapping instanceof YAMLMapping) { PsiElement parent = yamlMapping.getParent(); if(parent instanceof YAMLKeyValue) { String keyText = ((YAMLKeyValue) parent).getKeyText(); if(StringUtils.isNotBlank(keyText) && !keyText.contains(".") && PhpNameUtil.isValidNamespaceFullName(keyText)) { return keyText;
String keyText = ((YAMLKeyValue) yamlKeyValue).getKeyText(); if(!(keyText.equalsIgnoreCase("targetEntity") || keyText.equalsIgnoreCase("targetDocument"))) { return; String valueText = ((YAMLKeyValue) yamlKeyValue).getValueText(); if(StringUtils.isBlank(valueText)) { return; setTooltipText("Navigate to file"); PsiElement key = ((YAMLKeyValue) yamlKeyValueTarget).getKey(); if(key != null) { lineMarkerInfos.add(builder.createLineMarkerInfo(key));
@Nullable public static YAMLKeyValue getYamlKeyValue(@Nullable YAMLKeyValue yamlKeyValue, String keyName, boolean ignoreCase) { if(yamlKeyValue == null) { return null; } PsiElement yamlCompoundValue = yamlKeyValue.getValue(); if(!(yamlCompoundValue instanceof YAMLCompoundValue)) { return null; } return getYamlKeyValue(yamlCompoundValue, keyName, ignoreCase); }
private void registerYmlRoutePatternProblem(@NotNull ProblemsHolder holder, @NotNull YAMLKeyValue element) { String s = PsiElementUtils.trimQuote(element.getKeyText()); if(("factory_class".equals(s) || "factory_method".equals(s) || "factory_service".equals(s)) && YamlElementPatternHelper.getInsideServiceKeyPattern().accepts(element)) { // services: // foo: // factory_*: registerProblem(holder, element.getKey()); } }
/** * Symfony 3.3: "class" is optional; use service name for its it * * Foo\Bar: * arguments: ~ */ @Nullable public static String getServiceClassFromServiceMapping(@NotNull YAMLMapping yamlMapping) { YAMLKeyValue classKeyValue = yamlMapping.getKeyValueByKey("class"); // Symfony 3.3: "class" is optional; use service id for class // Foo\Bar: // arguments: ~ if(classKeyValue != null) { return classKeyValue.getValueText(); } PsiElement parent = yamlMapping.getParent(); if(parent instanceof YAMLKeyValue) { String keyText = ((YAMLKeyValue) parent).getKeyText(); if(YamlHelper.isClassServiceId(keyText)) { return keyText; } } return null; }
String keyName = yamlKeyValue.getKeyText(); if(StringUtils.isBlank(keyName)) { continue; YAMLValue value = arguments.getValue(); if(value instanceof YAMLSequence) { for (String id : YamlHelper.getYamlArrayValuesAsList((YAMLSequence) value)) { if(calls != null) { for (YAMLPsiElement yamlPsiElement : calls.getYAMLElements()) { if(yamlPsiElement instanceof YAMLSequence) { for (YAMLSequenceItem yamlSequenceItem : ((YAMLSequence) yamlPsiElement).getItems()) {
String keyText = yamlKeyValue.getKeyText(); if(StringUtils.isNotBlank(keyText) && !keyText.equals(keyText.toLowerCase()) && !YamlHelper.isClassServiceId(keyText)) { PsiElement firstChild = yamlKeyValue.getFirstChild(); if(firstChild != null) { holder.registerProblem(firstChild, SYMFONY_LOWERCASE_LETTERS_FOR_SERVICE, ProblemHighlightType.WEAK_WARNING);
String parameterName = ((YAMLKeyValue) context).getKeyText(); if(parameterName.startsWith("$") && parameterName.length() > 1) { PsiElement yamlMapping = context.getParent(); PsiElement yamlKeyValue = yamlMapping.getParent(); if(yamlKeyValue instanceof YAMLKeyValue) { String keyText = ((YAMLKeyValue) yamlKeyValue).getKeyText(); if(keyText.equals("arguments")) { YAMLMapping parentMapping = ((YAMLKeyValue) yamlKeyValue).getParentMapping(); if(parentMapping != null) { String serviceId = getServiceClassFromServiceMapping(parentMapping);
@Nullable public static PsiElement insertKeyIntoFile(final @NotNull YAMLFile yamlFile, final @NotNull YAMLKeyValue yamlKeyValue, @NotNull String... keys) { String keyText = yamlKeyValue.getKeyText(); return insertKeyIntoFile(yamlFile, (yamlMapping, chainedKey) -> { String text = yamlKeyValue.getText(); final String previousIndent = StringUtil.repeatSymbol(' ', YAMLUtil.getIndentInThisLine(yamlMapping)); // split content of array value object; // drop first item as getValueText() removes our key indent String[] remove = (String[]) ArrayUtils.remove(text.split("\\r?\\n"), 0); List<String> map = ContainerUtil.map(remove, s -> previousIndent + s); return "\n" + StringUtils.strip(StringUtils.join(map, "\n"), "\n"); }, (String[]) ArrayUtils.add(keys, keyText)); }
/** * Find controller definition in yaml structure * * foo: * defaults: { _controller: "Bundle:Foo:Bar" } * defaults: * _controller: "Bundle:Foo:Bar" * controller: "Bundle:Foo:Bar" */ @Nullable public static String getYamlController(@NotNull YAMLKeyValue psiElement) { YAMLKeyValue yamlKeyValue = YamlHelper.getYamlKeyValue(psiElement, "defaults"); if(yamlKeyValue != null) { final YAMLValue container = yamlKeyValue.getValue(); if(container instanceof YAMLMapping) { YAMLKeyValue yamlKeyValueController = YamlHelper.getYamlKeyValue(container, "_controller", true); if(yamlKeyValueController != null) { String valueText = yamlKeyValueController.getValueText(); if(StringUtils.isNotBlank(valueText)) { return valueText; } } } } String controller = YamlHelper.getYamlKeyValueAsString(psiElement, "controller"); if(controller != null && StringUtils.isNotBlank(controller)) { return controller; } return null; }
private static boolean collectItems(@NotNull List<String> levels, @NotNull YAMLKeyValue yamlKeyValue, @NotNull YamlTranslationCollector translationCollector) { List<YAMLPsiElement> childElements = yamlKeyValue.getYAMLElements(); String keyText = yamlKeyValue.getKeyText(); if(StringUtils.isBlank(keyText)) { return true;
private void visitServiceId(@NotNull PsiElement leafTarget, @NotNull YAMLKeyValue yamlKeyValue, @NotNull Collection<LineMarkerInfo> result, @NotNull LazyDecoratedParentServiceValues lazyDecoratedServices) { String id = yamlKeyValue.getKeyText(); if(StringUtils.isBlank(id)) { return; yamlKeyValue.getProject(), ServiceUtil.ServiceLineMarker.DECORATE, lazyDecoratedServices.getDecoratedServices(), yamlKeyValue.getProject(), ServiceUtil.ServiceLineMarker.PARENT, lazyDecoratedServices.getDecoratedServices(),
if ("services".equals(yamlKeyValue.getKeyText())) { PsiElement yamlKeyValueLastChild = yamlKeyValue.getLastChild(); if (yamlKeyValueLastChild instanceof YAMLMapping) { for (YAMLKeyValue keyValue : ((YAMLMapping) yamlKeyValueLastChild).getKeyValues()) {